<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.4"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>MuPDFCore: MuPDFCore.MuPDFRenderer/PDFRenderer.cs Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="Doxy.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr id="projectrow">
  <td id="projectlogo"><img alt="Logo" src="icon.svg"/></td>
  <td id="projectalign">
   <div id="projectname">MuPDFCore<span id="projectnumber">&#160;1.6.0</span>
   </div>
   <div id="projectbrief">Multiplatform .NET bindings for MuPDF</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.4 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search",'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function(){initNavTree('_p_d_f_renderer_8cs_source.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle"><div class="title">PDFRenderer.cs</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno">    1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno">    2</span><span class="comment">    MuPDFCore.MuPDFRenderer - A control to display documents in Avalonia using MuPDFCore.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno">    3</span><span class="comment">    Copyright (C) 2020  Giorgio Bianchini</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno">    4</span><span class="comment"></span> </div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno">    5</span><span class="comment">    This program is free software: you can redistribute it and/or modify</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno">    6</span><span class="comment">    it under the terms of the GNU Affero General Public License as</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno">    7</span><span class="comment">    published by the Free Software Foundation, version 3.</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno">    8</span><span class="comment"></span> </div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno">    9</span><span class="comment">    This program is distributed in the hope that it will be useful,</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno">   10</span><span class="comment">    but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno">   11</span><span class="comment">    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno">   12</span><span class="comment">    GNU Affero General Public License for more details.</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno">   13</span><span class="comment"></span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno">   14</span><span class="comment">    You should have received a copy of the GNU Affero General Public License</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno">   15</span><span class="comment">    along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno">   16</span><span class="comment">*/</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno">   17</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno">   18</span><span class="keyword">using </span><a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>;</div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno">   19</span><span class="keyword">using </span><a class="code hl_namespace" href="namespace_avalonia_1_1_animation.html">Avalonia.Animation</a>;</div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno">   20</span><span class="keyword">using </span>Avalonia.Controls;</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno">   21</span><span class="keyword">using </span>Avalonia.Input;</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno">   22</span><span class="keyword">using </span>Avalonia.Layout;</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno">   23</span><span class="keyword">using </span>Avalonia.LogicalTree;</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno">   24</span><span class="keyword">using </span>Avalonia.Media;</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno">   25</span><span class="keyword">using </span>Avalonia.Media.Imaging;</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno">   26</span><span class="keyword">using </span>Avalonia.Platform;</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno">   27</span><span class="keyword">using </span>Avalonia.Threading;</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno">   28</span><span class="keyword">using </span>System;</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno">   29</span><span class="keyword">using </span>System.Collections.Generic;</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno">   30</span><span class="keyword">using </span>System.IO;</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno">   31</span><span class="keyword">using </span>System.Linq;</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno">   32</span><span class="keyword">using </span>System.Runtime.InteropServices;</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno">   33</span><span class="keyword">using </span>System.Text.RegularExpressions;</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno">   34</span><span class="keyword">using </span>System.Threading;</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno">   35</span><span class="keyword">using </span>System.Threading.Tasks;</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno">   36</span> </div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="namespace_mu_p_d_f_core_1_1_mu_p_d_f_renderer.html">   37</a></span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespace_mu_p_d_f_core_1_1_mu_p_d_f_renderer.html">MuPDFCore.MuPDFRenderer</a></div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno">   38</span>{<span class="comment"></span></div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno">   39</span><span class="comment">    /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno">   40</span><span class="comment">    /// A control to render PDF documents (and other formats), potentally using multiple threads.</span></div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno">   41</span><span class="comment">    /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html">   42</a></span><span class="comment"></span>    <span class="keyword">public</span> <span class="keyword">partial class </span><a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html">PDFRenderer</a> : Control</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno">   43</span>    {<span class="comment"></span></div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno">   44</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno">   45</span><span class="comment">        /// If this is true, the &lt;see cref=&quot;Context&quot;/&gt; and &lt;see cref=&quot;Document&quot;/&gt; will be disposed when this object is detached from the logical tree.</span></div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno">   46</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno">   47</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> OwnsContextAndDocument = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno">   48</span><span class="comment"></span> </div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno">   49</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno">   50</span><span class="comment">        /// The &lt;see cref=&quot;MuPDFContext&quot;/&gt; using which the &lt;see cref=&quot;Document&quot;/&gt; was created.</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno">   51</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno">   52</span><span class="comment"></span>        <span class="keyword">protected</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a> Context;</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno">   53</span><span class="comment"></span> </div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno">   54</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno">   55</span><span class="comment">        /// The &lt;see cref=&quot;MuPDFDocument&quot;/&gt; from which the &lt;see cref=&quot;Renderer&quot;/&gt; was created.</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno">   56</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno">   57</span><span class="comment"></span>        <span class="keyword">protected</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a> Document;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno">   58</span><span class="comment"></span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno">   59</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno">   60</span><span class="comment">        /// The &lt;see cref=&quot;MuPDFMultiThreadedPageRenderer&quot;/&gt; that renders the dynamic tiles.</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno">   61</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno">   62</span><span class="comment"></span>        <span class="keyword">private</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">MuPDFMultiThreadedPageRenderer</a> Renderer;</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno">   63</span><span class="comment"></span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno">   64</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno">   65</span><span class="comment">        /// The static renderisation of the page.</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno">   66</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno">   67</span><span class="comment"></span>        <span class="keyword">private</span> WriteableBitmap FixedCanvasBitmap;</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno">   68</span><span class="comment"></span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno">   69</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno">   70</span><span class="comment">        /// The area covered by the &lt;see cref=&quot;FixedCanvasBitmap&quot;/&gt;. It should be equal to the &lt;see cref=&quot;PageSize&quot;/&gt;, but doesn&#39;t have to.</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno">   71</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno">   72</span><span class="comment"></span>        <span class="keyword">private</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> FixedArea;</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno">   73</span><span class="comment"></span> </div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno">   74</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno">   75</span><span class="comment">        /// The position and size of the dynamic tiles.</span></div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno">   76</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno">   77</span><span class="comment"></span>        <span class="keyword">private</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a>[] DynamicImagesBounds;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno">   78</span><span class="comment"></span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno">   79</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno">   80</span><span class="comment">        /// The dynamic tiles.</span></div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno">   81</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno">   82</span><span class="comment"></span>        <span class="keyword">private</span> WriteableBitmap[] DynamicBitmaps;</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno">   83</span><span class="comment"></span> </div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno">   84</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno">   85</span><span class="comment">        /// If this is true, the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt; have been rendered and can be drawn on screen.</span></div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno">   86</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno">   87</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> AreDynamicBitmapsReady = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno">   88</span><span class="comment"></span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno">   89</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno">   90</span><span class="comment">        /// If this is true, the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt; will be rendered again immediately after the current rendering operation finishes.</span></div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno">   91</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno">   92</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> RenderQueued = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno">   93</span><span class="comment"></span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno">   94</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno">   95</span><span class="comment">        /// A &lt;see cref=&quot;Mutex&quot;/&gt; to synchronise rendering operations. If someone else is holding this mutex, you can assume that it&#39;s not safe to access the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;.</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno">   96</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno">   97</span><span class="comment"></span>        <span class="keyword">private</span> Mutex RenderMutex;</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno">   98</span><span class="comment"></span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno">   99</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno">  100</span><span class="comment">        /// A &lt;see cref=&quot;Geometry&quot;/&gt; holding the icon that is displayed in the top-right corner when the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt; are not available.</span></div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno">  101</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno">  102</span><span class="comment"></span>        <span class="keyword">private</span> PathGeometry RefreshingGeometry;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno">  103</span><span class="comment"></span> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno">  104</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno">  105</span><span class="comment">        /// The thread that is in charge of responding to the rendering requests and either starting a new rendering of the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;, or queueing it.</span></div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno">  106</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno">  107</span><span class="comment"></span>        <span class="keyword">private</span> Thread RenderDynamicCanvasOuterThread;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno">  108</span><span class="comment"></span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno">  109</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno">  110</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals a request for rendering to the &lt;see cref=&quot;RenderDynamicCanvasOuterThread&quot;/&gt;.</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno">  111</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno">  112</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle RenderDynamicCanvasOuterHandle = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno">  113</span><span class="comment"></span> </div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno">  114</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno">  115</span><span class="comment">        /// The thread that is in charge of rendering the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;.</span></div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno">  116</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno">  117</span><span class="comment"></span>        <span class="keyword">private</span> Thread RenderDynamicCanvasInnerThread;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno">  118</span><span class="comment"></span> </div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno">  119</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno">  120</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals a request for rendering to the &lt;see cref=&quot;RenderDynamicCanvasInnerThread&quot;/&gt;.</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno">  121</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno">  122</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle RenderDynamicCanvasInnerHandle = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno">  123</span><span class="comment"></span> </div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno">  124</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno">  125</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals to the &lt;see cref=&quot;RenderDynamicCanvasOuterThread&quot;/&gt; that the &lt;see cref=&quot;RenderDynamicCanvasInnerThread&quot;/&gt; has acquired the &lt;see cref=&quot;RenderMutex&quot;/&gt; and is starting rendering.</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno">  126</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno">  127</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle RenderDynamicCanvasInnerStartedHandle = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno">  128</span><span class="comment"></span> </div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno">  129</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno">  130</span><span class="comment">        /// An &lt;see cref=&quot;EventWaitHandle&quot;/&gt; that signals to the &lt;see cref=&quot;RenderDynamicCanvasOuterThread&quot;/&gt; and the &lt;see cref=&quot;RenderDynamicCanvasInnerThread&quot;/&gt; to cease all operation because this &lt;see cref=&quot;PDFRenderer&quot;/&gt; is being detached from the logical tree.</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno">  131</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno">  132</span><span class="comment"></span>        <span class="keyword">private</span> readonly EventWaitHandle RendererDisposedHandle = <span class="keyword">new</span> EventWaitHandle(<span class="keyword">false</span>, EventResetMode.ManualReset);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno">  133</span><span class="comment"></span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno">  134</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno">  135</span><span class="comment">        /// The current rendering resolution (in screen units) that is used by the renderer when rendering the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;.</span></div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno">  136</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno">  137</span><span class="comment"></span>        <span class="keyword">private</span> readonly <span class="keywordtype">int</span>[] RenderSize = <span class="keyword">new</span> <span class="keywordtype">int</span>[2];</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno">  138</span><span class="comment"></span> </div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno">  139</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno">  140</span><span class="comment">        /// The area on the page that will be rendered by the renderer in the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;.</span></div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno">  141</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno">  142</span><span class="comment"></span>        <span class="keyword">private</span> Rect RenderDisplayArea;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno">  143</span><span class="comment"></span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno">  144</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno">  145</span><span class="comment">        /// A lock to prevent race conditions when multiple rendering passes are queued consecutively.</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno">  146</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno">  147</span><span class="comment"></span>        <span class="keyword">private</span> readonly <span class="keywordtype">object</span> RenderDisplayAreaLock = <span class="keyword">new</span> object();</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno">  148</span><span class="comment"></span> </div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno">  149</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno">  150</span><span class="comment">        /// Whether a PointerPressed event has fired.</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno">  151</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno">  152</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">bool</span> IsMouseDown = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno">  153</span><span class="comment"></span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno">  154</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno">  155</span><span class="comment">        /// The point at which the PointerPressed event fired.</span></div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno">  156</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno">  157</span><span class="comment"></span>        <span class="keyword">private</span> Point MouseDownPoint;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno">  158</span><span class="comment"></span> </div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno">  159</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno">  160</span><span class="comment">        /// The &lt;see cref=&quot;DisplayArea&quot;/&gt; when the PointerPressed event fired.</span></div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno">  161</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno">  162</span><span class="comment"></span>        <span class="keyword">private</span> Rect MouseDownDisplayArea;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno">  163</span><span class="comment"></span> </div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno">  164</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno">  165</span><span class="comment">        /// A structured text representation of the current page, used for selection and search highlight.</span></div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno">  166</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno">  167</span><span class="comment"></span>        <span class="keyword">protected</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html">MuPDFStructuredTextPage</a> StructuredTextPage;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno">  168</span><span class="comment"></span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno">  169</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno">  170</span><span class="comment">        /// A list of &lt;see cref=&quot;Quad&quot;/&gt;s that cover the selected text region.</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno">  171</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno">  172</span><span class="comment"></span>        <span class="keyword">protected</span> List&lt;Quad&gt; SelectionQuads;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno">  173</span><span class="comment"></span> </div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno">  174</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno">  175</span><span class="comment">        /// A list of &lt;see cref=&quot;Quad&quot;/&gt;s that cover the highlighted regions.</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno">  176</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno">  177</span><span class="comment"></span>        <span class="keyword">protected</span> List&lt;Quad&gt; HighlightQuads;</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno">  178</span><span class="comment"></span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno">  179</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno">  180</span><span class="comment">        /// Defines the current mouse operation.</span></div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno">  181</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno">  182</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keyword">enum</span> CurrentMouseOperations</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno">  183</span>        {<span class="comment"></span></div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno">  184</span><span class="comment">            /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno">  185</span><span class="comment">            /// The mouse is being used to pan around the page.</span></div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno">  186</span><span class="comment">            /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno">  187</span><span class="comment"></span>            Pan,</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno">  188</span><span class="comment"></span> </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno">  189</span><span class="comment">            /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno">  190</span><span class="comment">            /// The mouse is being used to highlight text</span></div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno">  191</span><span class="comment">            /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno">  192</span><span class="comment"></span>            Highlight</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno">  193</span>        }</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno">  194</span><span class="comment"></span> </div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno">  195</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno">  196</span><span class="comment">        /// The current mouse operation.</span></div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno">  197</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno">  198</span><span class="comment"></span>        <span class="keyword">private</span> CurrentMouseOperations CurrentMouseOperation;</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno">  199</span><span class="comment"></span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno">  200</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno">  201</span><span class="comment">        /// Initializes a new instance of the &lt;see cref=&quot;PDFRenderer&quot;/&gt; class.</span></div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno">  202</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">  203</a></span><span class="comment"></span>        <span class="keyword">public</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">PDFRenderer</a>()</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno">  204</span>        {</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno">  205</span>            this.InitializeComponent();</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno">  206</span> </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno">  207</span>            this.PropertyChanged += ControlPropertyChanged;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno">  208</span>            this.DetachedFromLogicalTree += ControlDetachedFromLogicalTree;</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno">  209</span>            this.PointerPressed += ControlPointerPressed;</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno">  210</span>            this.PointerReleased += ControlPointerReleased;</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno">  211</span>            this.PointerMoved += ControlPointerMoved;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno">  212</span>            this.PointerWheelChanged += ControlPointerWheelChanged;</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno">  213</span>        }</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno">  214</span><span class="comment"></span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno">  215</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno">  216</span><span class="comment">        /// Initializes inner components of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.</span></div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno">  217</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno">  218</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> InitializeComponent()</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno">  219</span>        {</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno">  220</span>            PathFigure arrow1 = <span class="keyword">new</span> PathFigure</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno">  221</span>            {</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno">  222</span>                StartPoint = <span class="keyword">new</span> Point(16 * Math.Cos(Math.PI / 4), 16 * Math.Sin(Math.PI / 4))</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno">  223</span>            };</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno">  224</span>            arrow1.Segments.Add(<span class="keyword">new</span> ArcSegment() { Point = <span class="keyword">new</span> Point(-16, 0), IsLargeArc = <span class="keyword">false</span>, RotationAngle = 0, <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_size.html">Size</a> = <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(16, 16), SweepDirection = SweepDirection.Clockwise });</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno">  225</span>            arrow1.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(-7.2727, 0) });</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno">  226</span>            arrow1.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(-21.8181, -17.4545) });</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno">  227</span>            arrow1.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(-36.3636, 0) });</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno">  228</span>            arrow1.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(-27.6363, 0) });</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno">  229</span>            arrow1.Segments.Add(<span class="keyword">new</span> ArcSegment() { Point = <span class="keyword">new</span> Point(27.6363 * Math.Cos(Math.PI / 4), 27.6363 * Math.Sin(Math.PI / 4)), IsLargeArc = <span class="keyword">false</span>, RotationAngle = 0, Size = <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(27.6363, 27.6363), SweepDirection = SweepDirection.CounterClockwise });</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno">  230</span>            arrow1.IsClosed = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno">  231</span> </div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno">  232</span>            PathFigure arrow2 = <span class="keyword">new</span> PathFigure</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno">  233</span>            {</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno">  234</span>                StartPoint = <span class="keyword">new</span> Point(16 * Math.Cos(5 * Math.PI / 4), 16 * Math.Sin(5 * Math.PI / 4))</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno">  235</span>            };</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno">  236</span>            arrow2.Segments.Add(<span class="keyword">new</span> ArcSegment() { Point = <span class="keyword">new</span> Point(16, 0), IsLargeArc = <span class="keyword">false</span>, RotationAngle = 0, Size = <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(16, 16), SweepDirection = SweepDirection.Clockwise });</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno">  237</span>            arrow2.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(7.2727, 0) });</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno">  238</span>            arrow2.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(21.8181, 17.4545) });</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno">  239</span>            arrow2.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(36.3636, 0) });</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno">  240</span>            arrow2.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = <span class="keyword">new</span> Point(27.6363, 0) });</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno">  241</span>            arrow2.Segments.Add(<span class="keyword">new</span> ArcSegment() { Point = <span class="keyword">new</span> Point(27.6363 * Math.Cos(5 * Math.PI / 4), 27.6363 * Math.Sin(5 * Math.PI / 4)), IsLargeArc = <span class="keyword">false</span>, RotationAngle = 0, Size = <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(27.6363, 27.6363), SweepDirection = SweepDirection.CounterClockwise });</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno">  242</span>            arrow2.IsClosed = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno">  243</span> </div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno">  244</span>            RefreshingGeometry = <span class="keyword">new</span> PathGeometry();</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno">  245</span>            RefreshingGeometry.Figures.Add(arrow1);</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno">  246</span>            RefreshingGeometry.Figures.Add(arrow2);</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno">  247</span>        }</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno">  248</span><span class="comment"></span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno">  249</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno">  250</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a &lt;see cref=&quot;MuPDFDocument&quot;/&gt;.</span></div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno">  251</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno">  252</span><span class="comment">        /// &lt;param name=&quot;document&quot;&gt;The &lt;see cref=&quot;MuPDFDocument&quot;/&gt; to render.&lt;/param&gt;</span></div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno">  253</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno">  254</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno">  255</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno">  256</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno">  257</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d0c7f77003321d29dbcff339ac39455">  258</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d0c7f77003321d29dbcff339ac39455">Initialize</a>(<a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a> document, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno">  259</span>        {</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno">  260</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno">  261</span>            {</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno">  262</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno">  263</span>            }</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno">  264</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno">  265</span>            OwnsContextAndDocument = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno">  266</span> </div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno">  267</span>            Document = document;</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno">  268</span>            Context = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno">  269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno">  270</span>            ContinueInitialization(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage);</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno">  271</span>        }</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno">  272</span><span class="comment"></span> </div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno">  273</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno">  274</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a &lt;see cref=&quot;MuPDFDocument&quot;/&gt;. The OCR step is run asynchronously, in order not to block the UI thread.</span></div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno">  275</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno">  276</span><span class="comment">        /// &lt;param name=&quot;document&quot;&gt;The &lt;see cref=&quot;MuPDFDocument&quot;/&gt; to render.&lt;/param&gt;</span></div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno">  277</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno">  278</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno">  279</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno">  280</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno">  281</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno">  282</span><span class="comment">        /// &lt;param name=&quot;ocrCancellationToken&quot;&gt;A &lt;see cref=&quot;CancellationToken&quot;/&gt; used to cancel the OCR operation.&lt;/param&gt;</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno">  283</span><span class="comment">        /// &lt;param name=&quot;ocrProgress&quot;&gt;An &lt;see cref=&quot;IProgress{OCRProgressInfo}&quot;/&gt; used to report OCR progress.&lt;/param&gt;</span></div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a026cdf9ee1222daed654fed059601f72">  284</a></span><span class="comment"></span>        <span class="keyword">public</span> async Task <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a026cdf9ee1222daed654fed059601f72">InitializeAsync</a>(<a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a> document, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>, CancellationToken ocrCancellationToken = <span class="keywordflow">default</span>, IProgress&lt;OCRProgressInfo&gt; ocrProgress = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno">  285</span>        {</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno">  286</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno">  287</span>            {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno">  288</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno">  289</span>            }</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno">  290</span> </div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno">  291</span>            OwnsContextAndDocument = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno">  292</span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno">  293</span>            Document = document;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno">  294</span>            Context = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno">  295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno">  296</span>            await ContinueInitializationAsync(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage, ocrCancellationToken, ocrProgress);</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno">  297</span>        }</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno">  298</span><span class="comment"></span> </div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno">  299</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno">  300</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from disk.</span></div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno">  301</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno">  302</span><span class="comment">        /// &lt;param name=&quot;fileName&quot;&gt;The path to the document that should be opened.&lt;/param&gt;</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno">  303</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno">  304</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno">  305</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno">  306</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno">  307</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a8f0e5046070368b4d5b123a1017755c8">  308</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a8f0e5046070368b4d5b123a1017755c8">Initialize</a>(<span class="keywordtype">string</span> fileName, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno">  309</span>        {</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno">  310</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno">  311</span>            {</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno">  312</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno">  313</span>            }</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno">  314</span> </div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno">  315</span>            OwnsContextAndDocument = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno">  316</span> </div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno">  317</span>            Context = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a>();</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno">  318</span>            Document = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a>(Context, fileName);</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno">  319</span> </div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno">  320</span>            ContinueInitialization(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage);</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno">  321</span>        }</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno">  322</span><span class="comment"></span> </div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno">  323</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno">  324</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from disk. The OCR step is run asynchronously, in order not to block the UI thread.</span></div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno">  325</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno">  326</span><span class="comment">        /// &lt;param name=&quot;fileName&quot;&gt;The path to the document that should be opened.&lt;/param&gt;</span></div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno">  327</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno">  328</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno">  329</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno">  330</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno">  331</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno">  332</span><span class="comment">        /// &lt;param name=&quot;ocrCancellationToken&quot;&gt;A &lt;see cref=&quot;CancellationToken&quot;/&gt; used to cancel the OCR operation.&lt;/param&gt;</span></div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno">  333</span><span class="comment">        /// &lt;param name=&quot;ocrProgress&quot;&gt;An &lt;see cref=&quot;IProgress{OCRProgressInfo}&quot;/&gt; used to report OCR progress.&lt;/param&gt;</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a394753442f87f857406e0b911419fb77">  334</a></span><span class="comment"></span>        <span class="keyword">public</span> async Task <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a394753442f87f857406e0b911419fb77">InitializeAsync</a>(<span class="keywordtype">string</span> fileName, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>, CancellationToken ocrCancellationToken = <span class="keywordflow">default</span>, IProgress&lt;OCRProgressInfo&gt; ocrProgress = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno">  335</span>        {</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno">  336</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno">  337</span>            {</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno">  338</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno">  339</span>            }</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno">  340</span> </div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno">  341</span>            OwnsContextAndDocument = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno">  342</span> </div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno">  343</span>            Context = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a>();</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno">  344</span>            Document = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a>(Context, fileName);</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno">  345</span> </div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno">  346</span>            await ContinueInitializationAsync(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage, ocrCancellationToken, ocrProgress);</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno">  347</span>        }</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno">  348</span><span class="comment"></span> </div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno">  349</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno">  350</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from a &lt;see cref=&quot;MemoryStream&quot;/&gt;.</span></div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno">  351</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno">  352</span><span class="comment">        /// &lt;param name=&quot;ms&quot;&gt;The &lt;see cref=&quot;MemoryStream&quot;/&gt; containing the document that should be opened. This can be safely disposed after this method returns.&lt;/param&gt;</span></div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno">  353</span><span class="comment">        /// &lt;param name=&quot;fileType&quot;&gt;The format of the document.&lt;/param&gt;</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno">  354</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno">  355</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno">  356</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno">  357</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno">  358</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#acb6eae5f0c6977b32930e33d46addfca">  359</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#acb6eae5f0c6977b32930e33d46addfca">Initialize</a>(MemoryStream ms, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#a6f956802ff33af39b555fc95caf5486f">InputFileTypes</a> fileType, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno">  360</span>        {</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno">  361</span>            <span class="comment">//Get the byte array that underlies the MemoryStream.</span></div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno">  362</span>            <span class="keywordtype">int</span> origin = (int)ms.Seek(0, SeekOrigin.Begin);</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno">  363</span>            <span class="keywordtype">long</span> dataLength = ms.Length;</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno">  364</span>            <span class="keywordtype">byte</span>[] dataBytes = ms.GetBuffer();</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno">  365</span> </div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno">  366</span>            <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d0c7f77003321d29dbcff339ac39455">Initialize</a>(dataBytes, fileType, origin, (<span class="keywordtype">int</span>)dataLength, threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage);</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno">  367</span>        }</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno">  368</span><span class="comment"></span> </div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno">  369</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno">  370</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from a &lt;see cref=&quot;MemoryStream&quot;/&gt;. The OCR step is run asynchronously, in order not to block the UI thread.</span></div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno">  371</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno">  372</span><span class="comment">        /// &lt;param name=&quot;ms&quot;&gt;The &lt;see cref=&quot;MemoryStream&quot;/&gt; containing the document that should be opened. This can be safely disposed after this method returns.&lt;/param&gt;</span></div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno">  373</span><span class="comment">        /// &lt;param name=&quot;fileType&quot;&gt;The format of the document.&lt;/param&gt;</span></div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno">  374</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno">  375</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno">  376</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno">  377</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno">  378</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno">  379</span><span class="comment">        /// &lt;param name=&quot;ocrCancellationToken&quot;&gt;A &lt;see cref=&quot;CancellationToken&quot;/&gt; used to cancel the OCR operation.&lt;/param&gt;</span></div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno">  380</span><span class="comment">        /// &lt;param name=&quot;ocrProgress&quot;&gt;An &lt;see cref=&quot;IProgress{OCRProgressInfo}&quot;/&gt; used to report OCR progress.&lt;/param&gt;</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c81912abc0f4f4d221ae5aedc2cac2">  381</a></span><span class="comment"></span>        <span class="keyword">public</span> async Task <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c81912abc0f4f4d221ae5aedc2cac2">InitializeAsync</a>(MemoryStream ms, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#a6f956802ff33af39b555fc95caf5486f">InputFileTypes</a> fileType, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>, CancellationToken ocrCancellationToken = <span class="keywordflow">default</span>, IProgress&lt;OCRProgressInfo&gt; ocrProgress = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno">  382</span>        {</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno">  383</span>            <span class="comment">//Get the byte array that underlies the MemoryStream.</span></div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno">  384</span>            <span class="keywordtype">int</span> origin = (int)ms.Seek(0, SeekOrigin.Begin);</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno">  385</span>            <span class="keywordtype">long</span> dataLength = ms.Length;</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno">  386</span>            <span class="keywordtype">byte</span>[] dataBytes = ms.GetBuffer();</div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno">  387</span> </div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno">  388</span>            await <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a026cdf9ee1222daed654fed059601f72">InitializeAsync</a>(dataBytes, fileType, origin, (<span class="keywordtype">int</span>)dataLength, threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage, ocrCancellationToken, ocrProgress);</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno">  389</span>        }</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno">  390</span><span class="comment"></span> </div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno">  391</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno">  392</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from an array of &lt;see cref=&quot;byte&quot;/&gt;s.</span></div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno">  393</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno">  394</span><span class="comment">        /// &lt;param name=&quot;dataBytes&quot;&gt;The bytes of the document that should be opened. The array will be copied and can be safely discarded/altered after this method returns.&lt;/param&gt;</span></div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno">  395</span><span class="comment">        /// &lt;param name=&quot;fileType&quot;&gt;The format of the document.&lt;/param&gt;</span></div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno">  396</span><span class="comment">        /// &lt;param name=&quot;offset&quot;&gt;The offset in the byte array at which the document starts.&lt;/param&gt;</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno">  397</span><span class="comment">        /// &lt;param name=&quot;length&quot;&gt;The length of the document in bytes. If this is &amp;lt; 0, the whole array is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno">  398</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno">  399</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno">  400</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno">  401</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno">  402</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a76c055712e78a0f2575b53059ce05a69">  403</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a76c055712e78a0f2575b53059ce05a69">Initialize</a>(<span class="keywordtype">byte</span>[] dataBytes, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#a6f956802ff33af39b555fc95caf5486f">InputFileTypes</a> fileType, <span class="keywordtype">int</span> offset = 0, <span class="keywordtype">int</span> length = -1, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno">  404</span>        {</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno">  405</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno">  406</span>            {</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno">  407</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno">  408</span>            }</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno">  409</span> </div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno">  410</span>            <span class="keywordflow">if</span> (length &lt; 0)</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno">  411</span>            {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno">  412</span>                length = dataBytes.Length - offset;</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno">  413</span>            }</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno">  414</span> </div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno">  415</span>            <span class="comment">//Copy the bytes to unmanaged memory, so that we don&#39;t depend on the original array.</span></div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno">  416</span>            IntPtr pointer = Marshal.AllocHGlobal(length);</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno">  417</span>            Marshal.Copy(dataBytes, offset, pointer, length);</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno">  418</span> </div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno">  419</span>            <span class="comment">//Wrap the pointer into a disposable container.</span></div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno">  420</span>            IDisposable disposer = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_disposable_int_ptr.html">DisposableIntPtr</a>(pointer);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno">  421</span> </div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno">  422</span>            OwnsContextAndDocument = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno">  423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno">  424</span>            Context = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a>();</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno">  425</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno">  426</span>            <span class="comment">//Create a new document, passing the wrapped pointer so that it can be released when the Document is disposed.</span></div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno">  427</span>            Document = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a>(Context, pointer, length, fileType, ref disposer);</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno">  428</span> </div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno">  429</span>            ContinueInitialization(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno">  430</span>        }</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno">  431</span><span class="comment"></span> </div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno">  432</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno">  433</span><span class="comment">        /// Set up the &lt;see cref=&quot;PDFRenderer&quot;/&gt; to display a page of a document that will be loaded from an array of &lt;see cref=&quot;byte&quot;/&gt;s. The OCR step is run asynchronously, in order not to block the UI thread.</span></div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno">  434</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno">  435</span><span class="comment">        /// &lt;param name=&quot;dataBytes&quot;&gt;The bytes of the document that should be opened. The array will be copied and can be safely discarded/altered after this method returns.&lt;/param&gt;</span></div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno">  436</span><span class="comment">        /// &lt;param name=&quot;fileType&quot;&gt;The format of the document.&lt;/param&gt;</span></div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno">  437</span><span class="comment">        /// &lt;param name=&quot;offset&quot;&gt;The offset in the byte array at which the document starts.&lt;/param&gt;</span></div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno">  438</span><span class="comment">        /// &lt;param name=&quot;length&quot;&gt;The length of the document in bytes. If this is &amp;lt; 0, the whole array is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno">  439</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno">  440</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno">  441</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno">  442</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno">  443</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno">  444</span><span class="comment">        /// &lt;param name=&quot;ocrCancellationToken&quot;&gt;A &lt;see cref=&quot;CancellationToken&quot;/&gt; used to cancel the OCR operation.&lt;/param&gt;</span></div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno">  445</span><span class="comment">        /// &lt;param name=&quot;ocrProgress&quot;&gt;An &lt;see cref=&quot;IProgress{OCRProgressInfo}&quot;/&gt; used to report OCR progress.&lt;/param&gt;</span></div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad06475fdd1cb91588789beb785c4ef86">  446</a></span><span class="comment"></span>        <span class="keyword">public</span> async Task <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad06475fdd1cb91588789beb785c4ef86">InitializeAsync</a>(<span class="keywordtype">byte</span>[] dataBytes, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#a6f956802ff33af39b555fc95caf5486f">InputFileTypes</a> fileType, <span class="keywordtype">int</span> offset = 0, <span class="keywordtype">int</span> length = -1, <span class="keywordtype">int</span> threadCount = 0, <span class="keywordtype">int</span> pageNumber = 0, <span class="keywordtype">double</span> resolutionMultiplier = 1, <span class="keywordtype">bool</span> includeAnnotations = <span class="keyword">true</span>, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>, CancellationToken ocrCancellationToken = <span class="keywordflow">default</span>, IProgress&lt;OCRProgressInfo&gt; ocrProgress = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno">  447</span>        {</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno">  448</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno">  449</span>            {</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno">  450</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno">  451</span>            }</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno">  452</span> </div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno">  453</span>            <span class="keywordflow">if</span> (length &lt; 0)</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno">  454</span>            {</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno">  455</span>                length = dataBytes.Length - offset;</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno">  456</span>            }</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno">  457</span> </div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno">  458</span>            <span class="comment">//Copy the bytes to unmanaged memory, so that we don&#39;t depend on the original array.</span></div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno">  459</span>            IntPtr pointer = Marshal.AllocHGlobal(length);</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno">  460</span>            Marshal.Copy(dataBytes, offset, pointer, length);</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno">  461</span> </div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno">  462</span>            <span class="comment">//Wrap the pointer into a disposable container.</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno">  463</span>            IDisposable disposer = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_disposable_int_ptr.html">DisposableIntPtr</a>(pointer);</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno">  464</span> </div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno">  465</span>            OwnsContextAndDocument = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno">  466</span> </div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno">  467</span>            Context = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFContext</a>();</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno">  468</span> </div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno">  469</span>            <span class="comment">//Create a new document, passing the wrapped pointer so that it can be released when the Document is disposed.</span></div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno">  470</span>            Document = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFDocument</a>(Context, pointer, length, fileType, ref disposer);</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno">  471</span> </div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno">  472</span>            await ContinueInitializationAsync(threadCount, pageNumber, resolutionMultiplier, includeAnnotations, ocrLanguage, ocrCancellationToken, ocrProgress);</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno">  473</span>        }</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno">  474</span><span class="comment"></span> </div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno">  475</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno">  476</span><span class="comment">        /// Common steps in the initialization process that will be performed regardless of how the &lt;see cref=&quot;Document&quot;/&gt; was obtained.</span></div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno">  477</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno">  478</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno">  479</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno">  480</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno">  481</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno">  482</span><span class="comment">        /// /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno">  483</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ContinueInitialization(<span class="keywordtype">int</span> threadCount, <span class="keywordtype">int</span> pageNumber, <span class="keywordtype">double</span> resolutionMultiplier, <span class="keywordtype">bool</span> includeAnnotations, <a class="code hl_class" href="class_mu_p_d_f_core_1_1_tesseract_language.html">TesseractLanguage</a> ocrLanguage = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno">  484</span>        {</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno">  485</span>            <span class="comment">//Initialise threads and locking mechanics.</span></div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno">  486</span>            <span class="keywordflow">if</span> (RenderMutex == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno">  487</span>            {</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno">  488</span>                RenderMutex = <span class="keyword">new</span> Mutex(<span class="keyword">false</span>);</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno">  489</span> </div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno">  490</span>                this.RenderDynamicCanvasOuterThread = <span class="keyword">new</span> Thread(() =&gt;</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno">  491</span>                {</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno">  492</span>                    RenderDynamicCanvasOuterAction();</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno">  493</span>                });</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno">  494</span> </div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno">  495</span>                this.RenderDynamicCanvasInnerThread = <span class="keyword">new</span> Thread(() =&gt;</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno">  496</span>                {</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno">  497</span>                    RenderDynamicCanvasInnerAction();</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno">  498</span>                });</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno">  499</span> </div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno">  500</span>                RenderDynamicCanvasOuterThread.Start();</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno">  501</span>                RenderDynamicCanvasInnerThread.Start();</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno">  502</span>            }</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno">  503</span> </div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno">  504</span>            <span class="comment">//Choose an appropriate number of threads based on the number of processors in the computer. We have an upper limit of 8 threads because more threads apparently caused reduced performance due to the synchronisation overhead.</span></div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno">  505</span>            <span class="keywordflow">if</span> (threadCount &lt;= 0)</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno">  506</span>            {</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno">  507</span>                threadCount = Math.Max(1, Math.Min(8, Environment.ProcessorCount - 2));</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno">  508</span>            }</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno">  509</span> </div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno">  510</span>            <span class="comment">//Create the structured text representation.</span></div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno">  511</span>            this.StructuredTextPage = Document.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a6a55fe2639c8e092f26fb2139e878754">GetStructuredTextPage</a>(pageNumber, ocrLanguage, includeAnnotations);</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno">  512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno">  513</span>            <span class="comment">//Create the multithreaded renderer.</span></div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno">  514</span>            Renderer = Document.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a5ea3701940cdfa3ca26676516a70bede">GetMultiThreadedRenderer</a>(pageNumber, threadCount, includeAnnotations);</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno">  515</span> </div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno">  516</span>            <span class="comment">//Set up the properties of this control.</span></div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno">  517</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a> = Renderer.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">ThreadCount</a>;</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno">  518</span>            Rectangle bounds = Document.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#ac691043a7c74ff979a4f80279a8e9f79">Pages</a>[pageNumber].Bounds;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno">  519</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a> = <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(bounds.X0, bounds.Y0), <span class="keyword">new</span> Point(bounds.X1, bounds.Y1));</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno">  520</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a10cc5f8912f189d0263b5765b3800510">PageNumber</a> = pageNumber;</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno">  521</span> </div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno">  522</span>            <span class="comment">//Render the static canvas (which is used when the DynamicBitmaps are not available).</span></div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno">  523</span>            RenderFixedCanvas(resolutionMultiplier);</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno">  524</span> </div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno">  525</span>            <span class="comment">//Initialize the dynamic canvas.</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno">  526</span>            InitializeDynamicCanvas();</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno">  527</span> </div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno">  528</span>            <span class="comment">//Set initial display area to include the whole page.</span></div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno">  529</span>            <span class="keywordtype">double</span> widthRatio = PageSize.Width / (this.Bounds.Width * resolutionMultiplier);</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno">  530</span>            <span class="keywordtype">double</span> heightRatio = PageSize.Height / (this.Bounds.Height * resolutionMultiplier);</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno">  531</span> </div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno">  532</span>            <span class="keywordtype">double</span> containingWidth = Math.Max(widthRatio, heightRatio) * this.Bounds.Width * resolutionMultiplier;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno">  533</span>            <span class="keywordtype">double</span> containingHeight = Math.Max(widthRatio, heightRatio) * this.Bounds.Height * resolutionMultiplier;</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno">  534</span> </div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno">  535</span>            SetDisplayAreaNowInternal(<span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(-(containingWidth - FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">Width</a>) * 0.5, -(containingHeight - FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">Height</a>) * 0.5), <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(containingWidth, containingHeight)));</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno">  536</span> </div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno">  537</span>            <span class="comment">//We are ready!</span></div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno">  538</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno">  539</span> </div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno">  540</span>            <span class="comment">//Queue a render of the DynamicBitmaps (on another thread).</span></div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno">  541</span>            RenderDynamicCanvas();</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno">  542</span>        }</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno">  543</span> </div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno">  544</span><span class="comment"></span> </div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno">  545</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno">  546</span><span class="comment">        /// Common steps in the initialization process that will be performed regardless of how the &lt;see cref=&quot;Document&quot;/&gt; was obtained. The OCR step is run asynchronously, in order not to block the UI thread.</span></div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno">  547</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno">  548</span><span class="comment">        /// &lt;param name=&quot;threadCount&quot;&gt;The number of threads to use in the rendering. If this is 0, an appropriate number of threads based on the number of processors in the computer will be used. Otherwise, this must be factorisable using only powers of 2, 3, 5 or 7. If this is not the case, the biggest number smaller than &lt;paramref name=&quot;threadCount&quot;/&gt; that satisfies this condition is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno">  549</span><span class="comment">        /// &lt;param name=&quot;pageNumber&quot;&gt;The index of the page that should be rendered. The first page has index 0.&lt;/param&gt;</span></div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno">  550</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno">  551</span><span class="comment">        /// &lt;param name=&quot;includeAnnotations&quot;&gt;If this is &lt;see langword=&quot;true&quot; /&gt;, annotations (e.g. signatures) are included in the rendering. Otherwise, only the page contents are included.&lt;/param&gt;</span></div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno">  552</span><span class="comment">        /// &lt;param name=&quot;ocrLanguage&quot;&gt;The language to use for optical character recognition (OCR). If this is null, no OCR is performed.&lt;/param&gt;</span></div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno">  553</span><span class="comment">        /// &lt;param name=&quot;ocrCancellationToken&quot;&gt;A &lt;see cref=&quot;CancellationToken&quot;/&gt; used to cancel the OCR operation.&lt;/param&gt;</span></div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno">  554</span><span class="comment">        /// &lt;param name=&quot;ocrProgress&quot;&gt;An &lt;see cref=&quot;IProgress{OCRProgressInfo}&quot;/&gt; used to report OCR progress.&lt;/param&gt;</span></div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno">  555</span><span class="comment"></span>        <span class="keyword">private</span> async Task ContinueInitializationAsync(<span class="keywordtype">int</span> threadCount, <span class="keywordtype">int</span> pageNumber, <span class="keywordtype">double</span> resolutionMultiplier, <span class="keywordtype">bool</span> includeAnnotations, TesseractLanguage ocrLanguage, CancellationToken ocrCancellationToken, IProgress&lt;OCRProgressInfo&gt; ocrProgress)</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno">  556</span>        {</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno">  557</span>            <span class="comment">//Initialise threads and locking mechanics.</span></div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno">  558</span>            <span class="keywordflow">if</span> (RenderMutex == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno">  559</span>            {</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno">  560</span>                RenderMutex = <span class="keyword">new</span> Mutex(<span class="keyword">false</span>);</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno">  561</span> </div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno">  562</span>                this.RenderDynamicCanvasOuterThread = <span class="keyword">new</span> Thread(() =&gt;</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno">  563</span>                {</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno">  564</span>                    RenderDynamicCanvasOuterAction();</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno">  565</span>                });</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno">  566</span> </div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno">  567</span>                this.RenderDynamicCanvasInnerThread = <span class="keyword">new</span> Thread(() =&gt;</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno">  568</span>                {</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno">  569</span>                    RenderDynamicCanvasInnerAction();</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno">  570</span>                });</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno">  571</span> </div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno">  572</span>                RenderDynamicCanvasOuterThread.Start();</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno">  573</span>                RenderDynamicCanvasInnerThread.Start();</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno">  574</span>            }</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno">  575</span> </div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno">  576</span>            <span class="comment">//Choose an appropriate number of threads based on the number of processors in the computer. We have an upper limit of 8 threads because more threads apparently caused reduced performance due to the synchronisation overhead.</span></div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno">  577</span>            <span class="keywordflow">if</span> (threadCount &lt;= 0)</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno">  578</span>            {</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno">  579</span>                threadCount = Math.Max(1, Math.Min(8, Environment.ProcessorCount - 2));</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno">  580</span>            }</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno">  581</span> </div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno">  582</span>            <span class="comment">//Create the structured text representation.</span></div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno">  583</span>            this.StructuredTextPage = await Document.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#ab74eca1ade08acd6c1c6a02f86b4129e">GetStructuredTextPageAsync</a>(pageNumber, ocrLanguage, includeAnnotations, ocrCancellationToken, ocrProgress);</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno">  584</span> </div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno">  585</span>            <span class="comment">//Create the multithreaded renderer.</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno">  586</span>            Renderer = Document.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a5ea3701940cdfa3ca26676516a70bede">GetMultiThreadedRenderer</a>(pageNumber, threadCount, includeAnnotations);</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno">  587</span> </div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno">  588</span>            <span class="comment">//Set up the properties of this control.</span></div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno">  589</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a> = Renderer.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">ThreadCount</a>;</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno">  590</span>            Rectangle bounds = Document.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#ac691043a7c74ff979a4f80279a8e9f79">Pages</a>[pageNumber].Bounds;</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno">  591</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a> = <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(bounds.X0, bounds.Y0), <span class="keyword">new</span> Point(bounds.X1, bounds.Y1));</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno">  592</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a10cc5f8912f189d0263b5765b3800510">PageNumber</a> = pageNumber;</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno">  593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno">  594</span>            <span class="comment">//Render the static canvas (which is used when the DynamicBitmaps are not available).</span></div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno">  595</span>            RenderFixedCanvas(resolutionMultiplier);</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno">  596</span> </div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno">  597</span>            <span class="comment">//Initialize the dynamic canvas.</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno">  598</span>            InitializeDynamicCanvas();</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno">  599</span> </div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno">  600</span>            <span class="comment">//Set initial display area to include the whole page.</span></div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno">  601</span>            <span class="keywordtype">double</span> widthRatio = PageSize.Width / (this.Bounds.Width * resolutionMultiplier);</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno">  602</span>            <span class="keywordtype">double</span> heightRatio = PageSize.Height / (this.Bounds.Height * resolutionMultiplier);</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno">  603</span> </div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno">  604</span>            <span class="keywordtype">double</span> containingWidth = Math.Max(widthRatio, heightRatio) * this.Bounds.Width * resolutionMultiplier;</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno">  605</span>            <span class="keywordtype">double</span> containingHeight = Math.Max(widthRatio, heightRatio) * this.Bounds.Height * resolutionMultiplier;</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno">  606</span> </div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno">  607</span>            SetDisplayAreaNowInternal(<span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(-(containingWidth - FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">Width</a>) * 0.5, -(containingHeight - FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">Height</a>) * 0.5), <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(containingWidth, containingHeight)));</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno">  608</span> </div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno">  609</span>            <span class="comment">//We are ready!</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno">  610</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno">  611</span> </div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno">  612</span>            <span class="comment">//Queue a render of the DynamicBitmaps (on another thread).</span></div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno">  613</span>            RenderDynamicCanvas();</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno">  614</span>        }</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno">  615</span><span class="comment"></span> </div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno">  616</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno">  617</span><span class="comment">        /// Release resources held by this PDFRenderer. This is not an irreversible step: using one of the Initialize overloads after calling this method will restore functionality.</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno">  618</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">  619</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>()</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno">  620</span>        {</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno">  621</span>            <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno">  622</span>            this.Renderer?.Dispose();</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno">  623</span>            this.StructuredTextPage = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno">  624</span>            this.Selection = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno">  625</span>            this.HighlightedRegions = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno">  626</span> </div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno">  627</span>            <span class="keywordflow">if</span> (OwnsContextAndDocument)</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno">  628</span>            {</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno">  629</span>                this.Document?.Dispose();</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno">  630</span>                this.Context?.Dispose();</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno">  631</span>            }</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno">  632</span>        }</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno">  633</span><span class="comment"></span> </div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno">  634</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno">  635</span><span class="comment">        /// Called when the PDFRenderer is removed from the logical tree (e.g. it is removed from the window, or the window containing it is closed). We assume that this renderer is not needed anymore. This is irreversible!</span></div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno">  636</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno">  637</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlDetachedFromLogicalTree(<span class="keywordtype">object</span> sender, LogicalTreeAttachmentEventArgs e)</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno">  638</span>        {</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno">  639</span>            RendererDisposedHandle.Set();</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno">  640</span>            <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">ReleaseResources</a>();</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno">  641</span>        }</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno">  642</span> </div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno">  643</span><span class="comment"></span> </div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno">  644</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno">  645</span><span class="comment">        /// Set the current display area to the specified &lt;paramref name=&quot;value&quot;/&gt;, skipping all transitions. This also skips sanity checks of the &lt;paramref name=&quot;value&quot;/&gt;, since the calling methods will already have performed them.</span></div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno">  646</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno">  647</span><span class="comment">        /// &lt;param name=&quot;value&quot;&gt;The new display area.&lt;/param&gt;</span></div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno">  648</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> SetDisplayAreaNowInternal(Rect value)</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno">  649</span>        {</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno">  650</span>            Transitions prevTransitions = this.Transitions;</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno">  651</span>            this.Transitions = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno">  652</span>            SetValue(<a class="code hl_variable" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32bad5475238f89c4ef1bd5d0976c08d">DisplayAreaProperty</a>, value);</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno">  653</span>            this.Transitions = prevTransitions;</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno">  654</span>        }</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno">  655</span><span class="comment"></span> </div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno">  656</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno">  657</span><span class="comment">        /// Set the current display area to the specified &lt;paramref name=&quot;value&quot;/&gt;, skipping all transitions.</span></div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno">  658</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno">  659</span><span class="comment">        /// &lt;param name=&quot;value&quot;&gt;The new display area.&lt;/param&gt;</span></div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a93a4b99fc4d8e41f83d043da24f813b5">  660</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a93a4b99fc4d8e41f83d043da24f813b5">SetDisplayAreaNow</a>(Rect value)</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno">  661</span>        {</div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno">  662</span>            Transitions prevTransitions = this.Transitions;</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno">  663</span>            this.Transitions = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno">  664</span>            this.DisplayArea = value;</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno">  665</span>            this.Transitions = prevTransitions;</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno">  666</span>        }</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno">  667</span><span class="comment"></span> </div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno">  668</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno">  669</span><span class="comment">        /// Zoom around a point.</span></div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno">  670</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno">  671</span><span class="comment">        /// &lt;param name=&quot;count&quot;&gt;Number of steps to zoom. Positive values indicate a zoom in, negative values a zoom out.&lt;/param&gt;</span></div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno">  672</span><span class="comment">        /// &lt;param name=&quot;center&quot;&gt;The point around which to center the zoom operation. If this is null, the center of the control is used.&lt;/param&gt;</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a831d88219b6638d7d2192d32b9119270">  673</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a831d88219b6638d7d2192d32b9119270">ZoomStep</a>(<span class="keywordtype">double</span> count, Point? center = <span class="keyword">null</span>)</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno">  674</span>        {</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno">  675</span>            <span class="keywordflow">if</span> (center == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno">  676</span>            {</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno">  677</span>                center = <span class="keyword">new</span> Point(this.Bounds.Width * 0.5, <span class="keyword">this</span>.Bounds.Height * 0.5);</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno">  678</span>            }</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno">  679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno">  680</span>            <span class="keywordtype">double</span> currZoomX = FixedArea.Width / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width;</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno">  681</span>            <span class="keywordtype">double</span> currZoomY = FixedArea.Height / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno">  682</span> </div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno">  683</span>            currZoomX *= Math.Pow(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a5a2fdaa31f4bf7ae8b3912d620a83759">ZoomIncrement</a>, count);</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno">  684</span>            currZoomY *= Math.Pow(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a5a2fdaa31f4bf7ae8b3912d620a83759">ZoomIncrement</a>, count);</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno">  685</span> </div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno">  686</span>            <span class="keywordtype">double</span> currWidth = FixedArea.Width / currZoomX;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno">  687</span>            <span class="keywordtype">double</span> currHeight = FixedArea.Height / currZoomY;</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno">  688</span> </div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno">  689</span>            <span class="keywordtype">double</span> deltaW = currWidth - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width;</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno">  690</span>            <span class="keywordtype">double</span> deltaH = currHeight - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height;</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno">  691</span> </div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno">  692</span>            SetValue(<a class="code hl_variable" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32bad5475238f89c4ef1bd5d0976c08d">DisplayAreaProperty</a>, <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.X - deltaW * center.Value.X / <span class="keyword">this</span>.Bounds.Width, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Y - deltaH * center.Value.Y / <span class="keyword">this</span>.Bounds.Height), <span class="keyword">new</span> Point(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Right + deltaW * (1 - center.Value.X / <span class="keyword">this</span>.Bounds.Width), <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Bottom + deltaH * (1 - center.Value.Y / <span class="keyword">this</span>.Bounds.Height))));</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno">  693</span>        }</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno">  694</span><span class="comment"></span> </div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno">  695</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno">  696</span><span class="comment">        /// Alter the display area so that the whole page fits on screen.</span></div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno">  697</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#af3695e65c81da6b9fb775127590a8ec5">  698</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#af3695e65c81da6b9fb775127590a8ec5">Contain</a>()</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno">  699</span>        {</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno">  700</span>            <span class="comment">//This will be sanitised by the property setter.</span></div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno">  701</span>            this.DisplayArea = this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>;</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno">  702</span>        }</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno">  703</span><span class="comment"></span> </div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno">  704</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno">  705</span><span class="comment">        /// Alter the display area so that the page covers the whole surface of the &lt;see cref=&quot;PDFRenderer&quot;/&gt; (even though parts of the page may be outside it).</span></div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno">  706</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c36ddc32230db7507d158447d8eda5">  707</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c36ddc32230db7507d158447d8eda5">Cover</a>()</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno">  708</span>        {</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno">  709</span>            <span class="keywordtype">double</span> widthRatio = this.PageSize.Width / (this.Bounds.Width);</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno">  710</span>            <span class="keywordtype">double</span> heightRatio = this.PageSize.Height / (this.Bounds.Height);</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno">  711</span> </div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno">  712</span>            <span class="keywordtype">double</span> containingWidth = Math.Min(widthRatio, heightRatio) * this.Bounds.Width;</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno">  713</span>            <span class="keywordtype">double</span> containingHeight = Math.Min(widthRatio, heightRatio) * this.Bounds.Height;</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno">  714</span> </div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno">  715</span>            <span class="keywordtype">double</span> deltaW = (containingWidth - this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Width) * 0.5;</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno">  716</span>            <span class="keywordtype">double</span> deltaH = (containingHeight - this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Height) * 0.5;</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno">  717</span> </div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno">  718</span>            Rect newDispArea = <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.X - deltaW, <span class="keyword">this</span>.PageSize.Y - deltaH), <span class="keyword">new</span> Point(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Right + deltaW, <span class="keyword">this</span>.PageSize.Bottom + deltaH));</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno">  719</span> </div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno">  720</span>            <span class="comment">//Skip sanitation.</span></div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno">  721</span>            SetValue(<a class="code hl_variable" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32bad5475238f89c4ef1bd5d0976c08d">DisplayAreaProperty</a>, newDispArea);</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno">  722</span>        }</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno">  723</span><span class="comment"></span> </div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno">  724</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno">  725</span><span class="comment">        /// Get the current rendering progress.</span></div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno">  726</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno">  727</span><span class="comment">        /// &lt;returns&gt;A &lt;see cref=&quot;RenderProgress&quot;/&gt; object with information about the rendering progress of each thread.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4b5fb2f9ad460c427d04dd07bfa557ef">  728</a></span><span class="comment"></span>        <span class="keyword">public</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_render_progress.html">RenderProgress</a> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4b5fb2f9ad460c427d04dd07bfa557ef">GetProgress</a>()</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno">  729</span>        {</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno">  730</span>            <span class="keywordflow">return</span> Renderer.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ab3967195e249f10b89eadaeed551a409">GetProgress</a>();</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno">  731</span>        }</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno">  732</span><span class="comment"></span> </div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno">  733</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno">  734</span><span class="comment">        /// Get the currently selected text.</span></div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno">  735</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno">  736</span><span class="comment">        /// &lt;returns&gt;The currently selected text.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aabc04d9677a558d2456cb37d1358e43b">  737</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">string</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aabc04d9677a558d2456cb37d1358e43b">GetSelectedText</a>()</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno">  738</span>        {</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno">  739</span>            <span class="keywordflow">return</span> this.StructuredTextPage.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#af8a0400f7f4be3f7d3a9649c7ef9bcdd">GetText</a>(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2c17cb9551f5d108e665c6ca74732ad2">Selection</a>);</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno">  740</span>        }</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno">  741</span><span class="comment"></span> </div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno">  742</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno">  743</span><span class="comment">        /// Selects all the text in the document.</span></div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno">  744</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aea002a2985da0e95cad9dee7a9d68626">  745</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aea002a2985da0e95cad9dee7a9d68626">SelectAll</a>()</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno">  746</span>        {</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno">  747</span>            <span class="keywordflow">if</span> (this.StructuredTextPage.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#aa69ccb2e2a5a88cbf4d39270fb32e8b6">Count</a> &gt; 0)</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno">  748</span>            {</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno">  749</span>                <span class="keywordtype">int</span> maxBlock = this.StructuredTextPage.Count - 1;</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno">  750</span>                <span class="keywordtype">int</span> maxLine = this.StructuredTextPage[maxBlock].<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#aa69ccb2e2a5a88cbf4d39270fb32e8b6">Count</a> - 1;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno">  751</span>                <span class="keywordtype">int</span> maxCharacter = this.StructuredTextPage[maxBlock][maxLine].<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#aa69ccb2e2a5a88cbf4d39270fb32e8b6">Count</a> - 1;</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno">  752</span> </div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno">  753</span>                this.Selection = <span class="keyword">new</span> <a class="code hl_class" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span.html">MuPDFStructuredTextAddressSpan</a>(<span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address.html">MuPDFStructuredTextAddress</a>(0, 0, 0), <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address.html">MuPDFStructuredTextAddress</a>(maxBlock, maxLine, maxCharacter));</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno">  754</span>            }</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno">  755</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno">  756</span>            {</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno">  757</span>                this.Selection = <span class="keyword">null</span>;</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno">  758</span>            }</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno">  759</span>        }</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno">  760</span><span class="comment"></span> </div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno">  761</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno">  762</span><span class="comment">        /// Highlights all matches of the specified &lt;see cref=&quot;Regex&quot;/&gt; in the text and returns the number of matches found. Matches cannot span multiple lines.</span></div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno">  763</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno">  764</span><span class="comment">        /// &lt;param name=&quot;needle&quot;&gt;The &lt;see cref=&quot;Regex&quot;/&gt; to search for.&lt;/param&gt;</span></div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno">  765</span><span class="comment">        /// &lt;returns&gt;The number of matches that have been found.&lt;/returns&gt;</span></div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aa2d32d055251b0d52b6d8c156ec3ada9">  766</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keywordtype">int</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aa2d32d055251b0d52b6d8c156ec3ada9">Search</a>(Regex needle)</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno">  767</span>        {</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno">  768</span>            List&lt;MuPDFStructuredTextAddressSpan&gt; spans = this.StructuredTextPage.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#ae23b5768410274d63f36088111b4d2cc">Search</a>(needle).ToList();</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno">  769</span>            this.HighlightedRegions = spans;</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno">  770</span>            <span class="keywordflow">return</span> spans.Count;</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno">  771</span>        }</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno">  772</span><span class="comment"></span> </div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno">  773</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno">  774</span><span class="comment">        /// Render the &lt;see cref=&quot;FixedCanvasBitmap&quot;/&gt;. </span></div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno">  775</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno">  776</span><span class="comment">        /// &lt;param name=&quot;resolutionMultiplier&quot;&gt;This value can be used to increase or decrease the resolution at which the static renderisation of the page will be produced. If &lt;paramref name=&quot;resolutionMultiplier&quot;/&gt; is 1, the resolution will match the size (in screen units) of the &lt;see cref=&quot;PDFRenderer&quot;/&gt;.&lt;/param&gt;</span></div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno">  777</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderFixedCanvas(<span class="keywordtype">double</span> resolutionMultiplier)</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno">  778</span>        {</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno">  779</span>            <span class="comment">//Take into account DPI scaling.</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno">  780</span>            resolutionMultiplier *= (VisualRoot as ILayoutRoot)?.LayoutScaling ?? 1;</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno">  781</span> </div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno">  782</span>            <span class="keywordtype">double</span> widthRatio = PageSize.Width / (this.Bounds.Width * resolutionMultiplier);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno">  783</span>            <span class="keywordtype">double</span> heightRatio = PageSize.Height / (this.Bounds.Height * resolutionMultiplier);</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno">  784</span> </div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno">  785</span>            <span class="keywordtype">double</span> zoom = 1 / Math.Min(widthRatio, heightRatio);</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno">  786</span> </div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno">  787</span>            <span class="comment">//Render the whole page</span></div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno">  788</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a> origin = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rectangle.html">Rectangle</a>(0, 0, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Width, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Height);</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno">  789</span> </div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno">  790</span>            FixedArea = origin;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno">  791</span> </div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno">  792</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">RoundedRectangle</a> roundedOrigin = origin.<a class="code hl_function" href="struct_mu_p_d_f_core_1_1_rectangle.html#a27cf4d4747a8677f8103746ee3386595">Round</a>(zoom);</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno">  793</span> </div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno">  794</span>            <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_size.html">RoundedSize</a> targetSize = <span class="keyword">new</span> <a class="code hl_struct" href="struct_mu_p_d_f_core_1_1_rounded_size.html">RoundedSize</a>(roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">Width</a>, roundedOrigin.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">Height</a>);</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno">  795</span>            <span class="keywordflow">if</span> (FixedCanvasBitmap == <span class="keyword">null</span>)</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno">  796</span>            {</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno">  797</span>                FixedCanvasBitmap = <span class="keyword">new</span> WriteableBitmap(<span class="keyword">new</span> PixelSize(targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">Width</a>, targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">Height</a>), <span class="keyword">new</span> Vector(72, 72), <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Platform.PixelFormat.Rgba8888, AlphaFormat.Unpremul);</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno">  798</span>            }</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno">  799</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno">  800</span>            {</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno">  801</span>                <span class="keywordflow">if</span> (FixedCanvasBitmap.PixelSize.Width != targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">Width</a> || FixedCanvasBitmap.PixelSize.Height != targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">Height</a>)</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno">  802</span>                {</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno">  803</span>                    FixedCanvasBitmap = <span class="keyword">new</span> WriteableBitmap(<span class="keyword">new</span> PixelSize(targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">Width</a>, targetSize.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">Height</a>), <span class="keyword">new</span> Vector(72, 72), <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Platform.PixelFormat.Rgba8888, AlphaFormat.Unpremul);</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno">  804</span>                }</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno">  805</span>            }</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno">  806</span> </div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno">  807</span>            <span class="comment">//Render the page to the FixedCanvasBitmap (without marshaling).</span></div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno">  808</span>            <span class="keyword">using</span> (ILockedFramebuffer fb = FixedCanvasBitmap.Lock())</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno">  809</span>            {</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno">  810</span>                Document.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a07d371f49b80285fe2303cc3736d34d8">Render</a>(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a10cc5f8912f189d0263b5765b3800510">PageNumber</a>, origin, zoom, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a>.RGBA, fb.Address);</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno">  811</span>            }</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno">  812</span>        }</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno">  813</span><span class="comment"></span> </div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno">  814</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno">  815</span><span class="comment">        /// Set up the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt; array with an appropriate number of &lt;see cref=&quot;WriteableBitmap&quot;/&gt; of the appropriate size.</span></div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno">  816</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno">  817</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> InitializeDynamicCanvas()</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno">  818</span>        {</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno">  819</span>            <span class="comment">//Take into account DPI scaling.</span></div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno">  820</span>            <span class="keywordtype">double</span> scale = (VisualRoot as ILayoutRoot)?.LayoutScaling ?? 1;</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno">  821</span> </div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno">  822</span>            <span class="comment">//Acquire the render mutex (we don&#39;t want anyone to touch the DynamicBitmaps while we are resizing them!)</span></div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno">  823</span>            RenderMutex.WaitOne();</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno">  824</span>            RoundedSize targetSize = <span class="keyword">new</span> RoundedSize((<span class="keywordtype">int</span>)Math.Ceiling(<span class="keyword">this</span>.Bounds.Width * scale), (<span class="keywordtype">int</span>)Math.Ceiling(<span class="keyword">this</span>.Bounds.Height * scale));</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno">  825</span> </div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno">  826</span>            <span class="comment">//Split the target size into an appropriate number of tiles.</span></div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno">  827</span>            RoundedRectangle[] splitSizes = targetSize.Split(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>);</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno">  828</span> </div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno">  829</span>            DynamicImagesBounds = splitSizes;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno">  830</span> </div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno">  831</span>            <span class="keywordflow">if</span> (DynamicBitmaps == <span class="keyword">null</span> || DynamicBitmaps.Length != <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>)</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno">  832</span>            {</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno">  833</span>                DynamicBitmaps = <span class="keyword">new</span> WriteableBitmap[<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>];</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno">  834</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; splitSizes.Length; i++)</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno">  835</span>                {</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno">  836</span>                    DynamicBitmaps[i] = <span class="keyword">new</span> WriteableBitmap(<span class="keyword">new</span> PixelSize(splitSizes[i].Width, splitSizes[i].Height), <span class="keyword">new</span> Vector(72, 72), <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Platform.PixelFormat.Rgba8888, AlphaFormat.Unpremul);</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno">  837</span>                }</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno">  838</span>            }</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno">  839</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno">  840</span>            {</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno">  841</span>                <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; splitSizes.Length; i++)</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno">  842</span>                {</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno">  843</span>                    <span class="keywordflow">if</span> (DynamicBitmaps[i].PixelSize.Width != splitSizes[i].Width || DynamicBitmaps[i].PixelSize.Height != splitSizes[i].Height)</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno">  844</span>                    {</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno">  845</span>                        DynamicBitmaps[i] = <span class="keyword">new</span> WriteableBitmap(<span class="keyword">new</span> PixelSize(splitSizes[i].Width, splitSizes[i].Height), <span class="keyword">new</span> Vector(72, 72), <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Platform.PixelFormat.Rgba8888, AlphaFormat.Unpremul);</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno">  846</span>                    }</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno">  847</span>                }</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno">  848</span>            }</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno">  849</span> </div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno">  850</span>            <span class="comment">//Release the render mutex.</span></div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno">  851</span>            RenderMutex.ReleaseMutex();</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno">  852</span>        }</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno">  853</span><span class="comment"></span> </div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno">  854</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno">  855</span><span class="comment">        /// The outer loop that is executed by the &lt;see cref=&quot;RenderDynamicCanvasOuterThread&quot;/&gt;, which is in charge of responding to the rendering requests and either starting a new rendering of the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;, or queueing it.</span></div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno">  856</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno">  857</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderDynamicCanvasOuterAction()</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno">  858</span>        {</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno">  859</span>            EventWaitHandle[] handles = <span class="keyword">new</span> EventWaitHandle[] { RenderDynamicCanvasOuterHandle, RendererDisposedHandle };</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno">  860</span> </div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno">  861</span>            <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno">  862</span>            {</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno">  863</span>                <span class="keywordtype">int</span> result = EventWaitHandle.WaitAny(handles);</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno">  864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno">  865</span>                <span class="keywordflow">if</span> (result == 0)</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno">  866</span>                {</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno">  867</span>                    <span class="comment">//So that we don&#39;t lose consecutive requests.</span></div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno">  868</span>                    RenderDynamicCanvasOuterHandle.Reset();</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno">  869</span> </div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno">  870</span>                    <span class="comment">//Check if the rendering is already in progress.</span></div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno">  871</span>                    <span class="keywordflow">if</span> (RenderMutex.WaitOne(0))</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno">  872</span>                    {</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno">  873</span>                        <span class="comment">//Start a new rendering</span></div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno">  874</span>                        AreDynamicBitmapsReady = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno">  875</span> </div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno">  876</span>                        <span class="comment">//This handle will be set by the inner thread once it starts rendering.</span></div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno">  877</span>                        RenderDynamicCanvasInnerStartedHandle.Reset();</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno">  878</span> </div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno">  879</span>                        <span class="comment">//Tell the inner thread to start rendering.</span></div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno">  880</span>                        RenderDynamicCanvasInnerHandle.Set();</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno">  881</span> </div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno">  882</span>                        <span class="comment">//Release the mutex so that the inner thread can start rendering.</span></div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno">  883</span>                        RenderMutex.ReleaseMutex();</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno">  884</span> </div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno">  885</span>                        <span class="comment">//Wait until the inner thread has acuired the mutex and started rendering.</span></div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno">  886</span>                        RenderDynamicCanvasInnerStartedHandle.WaitOne();</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno">  887</span>                    }</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno">  888</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno">  889</span>                    {</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno">  890</span>                        <span class="keywordflow">if</span> (!RenderQueued)</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno">  891</span>                        {</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno">  892</span>                            <span class="comment">//Queue another rendering pass.</span></div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno">  893</span>                            RenderQueued = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno">  894</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno">  895</span>                            <span class="comment">//Abort the current rendering pass.</span></div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno">  896</span>                            Renderer.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">Abort</a>();</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno">  897</span>                        }</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno">  898</span>                    }</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno">  899</span>                }</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno">  900</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno">  901</span>                {</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno">  902</span>                    <span class="comment">//The renderer is being disposed, we need to quit!</span></div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno">  903</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno">  904</span>                }</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno">  905</span>            }</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno">  906</span>        }</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno">  907</span><span class="comment"></span> </div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno">  908</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno">  909</span><span class="comment">        /// The inner loop that is executed by the &lt;see cref=&quot;RenderDynamicCanvasInnerThread&quot;/&gt;, which renders the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt;.</span></div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno">  910</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno">  911</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderDynamicCanvasInnerAction()</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno">  912</span>        {</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno">  913</span>            EventWaitHandle[] handles = <span class="keyword">new</span> EventWaitHandle[] { RenderDynamicCanvasInnerHandle, RendererDisposedHandle };</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno">  914</span> </div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno">  915</span>            <span class="keywordtype">bool</span> ownsMutex = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno">  916</span> </div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno">  917</span>            <span class="keywordflow">while</span> (<span class="keyword">true</span>)</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno">  918</span>            {</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno">  919</span>                <span class="keywordtype">int</span> result = EventWaitHandle.WaitAny(handles);</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno">  920</span> </div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno">  921</span>                <span class="keywordflow">if</span> (result == 0)</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno">  922</span>                {</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno">  923</span>                    <span class="comment">//So that we don&#39;t lose consecutive requests.</span></div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno">  924</span>                    RenderDynamicCanvasInnerHandle.Reset();</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno">  925</span> </div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno">  926</span>                    <span class="comment">//Acquire the mutex only if have not acquired it yet.</span></div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno">  927</span>                    <span class="keywordflow">if</span> (!ownsMutex)</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno">  928</span>                    {</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno">  929</span>                        RenderMutex.WaitOne();</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno">  930</span>                        ownsMutex = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno">  931</span>                    }</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno">  932</span> </div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno">  933</span>                    <span class="comment">//Signal to the outer thread that we have acquired the mutex. Even if the outer thread is not waiting for this signal, it will reset it before waiting for it.</span></div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno">  934</span>                    RenderDynamicCanvasInnerStartedHandle.Set();</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno">  935</span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno">  936</span>                    <span class="comment">//Set up the pointers to the contents of the DynamicBitmaps</span></div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno">  937</span>                    IntPtr[] destinations = <span class="keyword">new</span> IntPtr[<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>];</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno">  938</span>                    ILockedFramebuffer[] fbs = <span class="keyword">new</span> ILockedFramebuffer[<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>];</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno">  939</span> </div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno">  940</span>                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>; i++)</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno">  941</span>                    {</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno">  942</span>                        fbs[i] = DynamicBitmaps[i].Lock();</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno">  943</span>                        destinations[i] = fbs[i].Address;</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno">  944</span>                    }</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno">  945</span> </div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno">  946</span>                    <span class="comment">//Prevent race conditions.</span></div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno">  947</span>                    Rectangle target;</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno">  948</span>                    <span class="keywordtype">int</span> width;</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno">  949</span>                    <span class="keywordtype">int</span> height;</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno">  950</span>                    lock (RenderDisplayAreaLock)</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno">  951</span>                    {</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno">  952</span>                        target = <span class="keyword">new</span> Rectangle(RenderDisplayArea.X, RenderDisplayArea.Y, RenderDisplayArea.Right, RenderDisplayArea.Bottom);</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno">  953</span>                        width = RenderSize[0];</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno">  954</span>                        height = RenderSize[1];</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno">  955</span>                    }</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno">  956</span> </div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno">  957</span>                    <span class="comment">//Start the multithreaded rendering and wait until it finishes.</span></div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno">  958</span>                    Renderer.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">Render</a>(<span class="keyword">new</span> RoundedSize(width, height), target, destinations, <a class="code hl_enumeration" href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">PixelFormats</a>.RGBA);</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno">  959</span> </div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno">  960</span>                    <span class="comment">//Free the pointers.</span></div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno">  961</span>                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">RenderThreadCount</a>; i++)</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno">  962</span>                    {</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno">  963</span>                        fbs[i].Dispose();</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno">  964</span>                    }</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno">  965</span> </div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno">  966</span>                    <span class="comment">//Check whether another rendering request has been queued.</span></div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno">  967</span>                    <span class="keywordflow">if</span> (!RenderQueued)</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno">  968</span>                    {</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno">  969</span>                        <span class="comment">//No other rendering requests have been queued.</span></div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno">  970</span>                        AreDynamicBitmapsReady = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno">  971</span> </div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno">  972</span>                        <span class="comment">//This should always be true. Release the rendering mutex.</span></div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno">  973</span>                        <span class="keywordflow">if</span> (ownsMutex)</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno">  974</span>                        {</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno">  975</span>                            RenderMutex.ReleaseMutex();</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno">  976</span>                            ownsMutex = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno">  977</span>                        }</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno">  978</span> </div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno">  979</span>                        <span class="comment">//Signal to the UI that a repaint is required.</span></div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno">  980</span>                        Dispatcher.UIThread.InvokeAsync(() =&gt;</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno">  981</span>                        {</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno">  982</span>                            this.InvalidateVisual();</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno">  983</span>                        });</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno">  984</span>                    }</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno">  985</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno">  986</span>                    {</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno">  987</span>                        <span class="comment">//Another rendering request has been queued, we can assume that whatever we have rendered until now is useless (maybe because the rendering has been aborted).</span></div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno">  988</span>                        RenderQueued = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno">  989</span> </div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno">  990</span>                        <span class="comment">//Self-signal.</span></div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno">  991</span>                        RenderDynamicCanvasInnerHandle.Set();</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno">  992</span>                    }</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno">  993</span>                }</div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno">  994</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno">  995</span>                {</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno">  996</span>                    <span class="comment">//The renderer is being disposed, we need to quit!</span></div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno">  997</span>                    <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno">  998</span>                }</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno">  999</span>            }</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span>        }</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span><span class="comment"></span> </div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span><span class="comment">        /// Signal to the &lt;see cref=&quot;RenderDynamicCanvasOuterThread&quot;/&gt; that a rendering has been requested.</span></div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> RenderDynamicCanvas()</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span>        {</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span>            <span class="comment">//Take into account DPI scaling.</span></div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span>            <span class="keywordtype">double</span> scale = (VisualRoot as ILayoutRoot).LayoutScaling;</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> </div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span>            <span class="comment">//Set up rendering size</span></div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span>            lock (RenderDisplayAreaLock)</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span>            {</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span>                RenderSize[0] = (int)Math.Ceiling(<span class="keyword">this</span>.Bounds.Width * scale);</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span>                RenderSize[1] = (int)Math.Ceiling(<span class="keyword">this</span>.Bounds.Height * scale);</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span>                RenderDisplayArea = <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>;</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span>            }</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> </div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span>            <span class="comment">//Send the signal.</span></div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span>            RenderDynamicCanvasOuterHandle.Set();</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span>        }</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span><span class="comment"></span> </div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span><span class="comment">        /// Resizes the &lt;see cref=&quot;DynamicBitmaps&quot;/&gt; when the size of the control changes and queues a repaint when the &lt;see cref=&quot;DisplayArea&quot;/&gt; changes.</span></div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span><span class="comment">        /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span><span class="comment">        /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlPropertyChanged(<span class="keywordtype">object</span> sender, AvaloniaPropertyChangedEventArgs e)</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span>        {</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span>            <span class="keywordflow">if</span> (e.Property == UserControl.BoundsProperty)</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span>            {</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span>                <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span>                {</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span>                    <span class="comment">//Resize the display area</span></div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span>                    Rect oldBounds = (Rect)e.OldValue;</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span>                    Rect newBounds = (Rect)e.NewValue;</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> </div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span>                    <span class="keywordtype">double</span> deltaW = (newBounds.Width - oldBounds.Width) / oldBounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width;</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span>                    <span class="keywordtype">double</span> deltaH = (newBounds.Height - oldBounds.Height) / oldBounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height;</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> </div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span>                    Rect target = <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.X - deltaW * 0.5, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Y - deltaH * 0.5), <span class="keyword">new</span> Point(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Right + deltaW * 0.5, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Bottom + deltaH * 0.5));</div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> </div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span>                    <span class="comment">//Resize the DynamicBitmaps</span></div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span>                    InitializeDynamicCanvas();</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> </div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span>                    <span class="comment">//Set the new DisplayArea, skipping any animation.</span></div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span>                    SetDisplayAreaNowInternal(target);</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span>                }</div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span>            }</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (e.Property == <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">PDFRenderer</a>.DisplayAreaProperty)</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span>            {</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span>                <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span>                {</div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span>                    <span class="comment">//Update the value of the Zoom property.</span></div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span>                    ComputeZoom();</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> </div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span>                    <span class="comment">//Signal that a repaint is needed</span></div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span>                    this.InvalidateVisual();</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> </div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span>                    <span class="comment">//Queue a new rendering of the DynamicBitmaps</span></div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span>                    RenderDynamicCanvas();</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span>                }</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span>            }</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (e.Property == <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">PDFRenderer</a>.SelectionProperty &amp;&amp; <span class="keyword">this</span>.StructuredTextPage != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span>            {</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span>                <span class="comment">//Update the selection quads to reflect the new selection</span></div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span>                this.SelectionQuads = this.StructuredTextPage.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#afd2b0e40b332065320cb2fe13da21388">GetHighlightQuads</a>(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2c17cb9551f5d108e665c6ca74732ad2">Selection</a>, <span class="keyword">false</span>).ToList();</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span>                this.InvalidateVisual();</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span>            }</div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (e.Property == <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">PDFRenderer</a>.HighlightedRegionsProperty &amp;&amp; <span class="keyword">this</span>.StructuredTextPage != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span>            {</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span>                <span class="comment">//Update the highlight quads to reflect the new highlighted regions</span></div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span>                this.HighlightQuads = <span class="keyword">new</span> List&lt;Quad&gt;();</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> </div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span>                <span class="keywordflow">if</span> (this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a78100c2074f6add556fe0b0e783af5c7">HighlightedRegions</a> != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span>                {</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span>                    <span class="keywordflow">foreach</span> (MuPDFStructuredTextAddressSpan span <span class="keywordflow">in</span> this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a78100c2074f6add556fe0b0e783af5c7">HighlightedRegions</a>)</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span>                    {</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span>                        this.HighlightQuads.AddRange(this.StructuredTextPage.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#afd2b0e40b332065320cb2fe13da21388">GetHighlightQuads</a>(span, <span class="keyword">false</span>));</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span>                    }</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span>                }</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> </div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span>                this.InvalidateVisual();</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span>            }</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span>        }</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span><span class="comment"></span> </div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span><span class="comment">        /// Default handler for the PointerPressed event (start panning).</span></div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span><span class="comment">        /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span><span class="comment">        /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlPointerPressed(<span class="keywordtype">object</span> sender, PointerPressedEventArgs e)</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span>        {</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Pan)</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span>            {</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span>                <span class="keywordflow">if</span> (e.GetCurrentPoint(<span class="keyword">this</span>).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonPressed)</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span>                {</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span>                    IsMouseDown = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span>                    MouseDownPoint = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span>                    MouseDownDisplayArea = <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>;</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span>                    this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.SizeAll);</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span>                }</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span>            }</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Highlight)</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span>            {</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span>                <span class="keywordflow">if</span> (e.GetCurrentPoint(<span class="keyword">this</span>).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonPressed)</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span>                {</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span>                    Point point = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> </div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span>                    IsMouseDown = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span>                    MouseDownPoint = point;</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span>                    MouseDownDisplayArea = <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>;</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> </div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span>                    PointF pagePoint = <span class="keyword">new</span> PointF((<span class="keywordtype">float</span>)(point.X / <span class="keyword">this</span>.Bounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left), (<span class="keywordtype">float</span>)(point.Y / <span class="keyword">this</span>.Bounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top));</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> </div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span>                    MuPDFStructuredTextAddress? address = StructuredTextPage?.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a72a1b22f5c01431cefb93ba1e2a06bd1">GetHitAddress</a>(pagePoint, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> </div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span>                    <span class="keywordflow">if</span> (address != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span>                    {</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span>                        this.Selection = <span class="keyword">new</span> MuPDFStructuredTextAddressSpan(address.Value, <span class="keyword">null</span>);</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span>                    }</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span>                    {</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span>                        this.Selection = <span class="keyword">null</span>;</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span>                    }</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span>                }</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span>            }</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.PanHighlight)</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span>            {</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span>                Point point = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span>                PointF pagePoint = <span class="keyword">new</span> PointF((<span class="keywordtype">float</span>)(point.X / <span class="keyword">this</span>.Bounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left), (<span class="keywordtype">float</span>)(point.Y / <span class="keyword">this</span>.Bounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top));</div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span>                MuPDFStructuredTextAddress? address = StructuredTextPage?.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a72a1b22f5c01431cefb93ba1e2a06bd1">GetHitAddress</a>(pagePoint, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> </div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span>                <span class="keywordflow">if</span> (address == <span class="keyword">null</span>)</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span>                {</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span>                    <span class="keywordflow">if</span> (e.GetCurrentPoint(<span class="keyword">this</span>).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonPressed)</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span>                    {</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span>                        IsMouseDown = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span>                        MouseDownPoint = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span>                        MouseDownDisplayArea = <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>;</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.SizeAll);</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span>                        CurrentMouseOperation = CurrentMouseOperations.Pan;</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span>                    }</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span>                }</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span>                {</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span>                    <span class="keywordflow">if</span> (e.GetCurrentPoint(<span class="keyword">this</span>).Properties.PointerUpdateKind == PointerUpdateKind.LeftButtonPressed)</div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span>                    {</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span>                        IsMouseDown = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span>                        MouseDownPoint = point;</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span>                        MouseDownDisplayArea = <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>;</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> </div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span>                        this.Selection = <span class="keyword">new</span> MuPDFStructuredTextAddressSpan(address.Value, <span class="keyword">null</span>);</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span>                        CurrentMouseOperation = CurrentMouseOperations.Highlight;</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span>                    }</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span>                }</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span>            }</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span>        }</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span><span class="comment"></span> </div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span><span class="comment">        /// Default handler for the PointerReleased event (finish panning).</span></div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span><span class="comment">        /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span><span class="comment">        /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlPointerReleased(<span class="keywordtype">object</span> sender, PointerReleasedEventArgs e)</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span>        {</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Pan)</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span>            {</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span>                <span class="keywordflow">if</span> (e.InitialPressMouseButton == MouseButton.Left)</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span>                {</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span>                    IsMouseDown = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span>                    this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Arrow);</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span>                }</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span>            }</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Highlight)</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span>            {</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span>                <span class="keywordflow">if</span> (e.InitialPressMouseButton == MouseButton.Left)</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span>                {</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span>                    IsMouseDown = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span>                    <span class="keywordflow">if</span> (e.GetPosition(<span class="keyword">this</span>).Equals(MouseDownPoint))</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span>                    {</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span>                        this.Selection = <span class="keyword">null</span>;</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span>                    }</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span>                }</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span>            }</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span>            <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.PanHighlight)</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span>            {</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span>                <span class="keywordflow">if</span> (e.InitialPressMouseButton == MouseButton.Left)</div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span>                {</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span>                    IsMouseDown = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span>                    <span class="keywordflow">if</span> (CurrentMouseOperation == CurrentMouseOperations.Pan)</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span>                    {</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Arrow);</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span>                    }</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span>                    <span class="keywordflow">if</span> (e.GetPosition(<span class="keyword">this</span>).Equals(MouseDownPoint))</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span>                    {</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span>                        this.Selection = <span class="keyword">null</span>;</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span>                    }</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span>                }</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span>            }</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span>        }</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span><span class="comment"></span> </div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span><span class="comment">        /// Default handler for the PointerMoved event (pan).</span></div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span><span class="comment">        /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span><span class="comment">        /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlPointerMoved(<span class="keywordtype">object</span> sender, PointerEventArgs e)</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span>        {</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span>            <span class="keywordflow">if</span> (IsMouseDown)</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span>            {</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span>                <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Pan || (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.PanHighlight &amp;&amp; CurrentMouseOperation == CurrentMouseOperations.Pan))</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span>                {</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> </div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span>                    Point point = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> </div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span>                    <span class="keywordtype">double</span> deltaX = (-point.X + MouseDownPoint.X) / this.Bounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width;</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span>                    <span class="keywordtype">double</span> deltaY = (-point.Y + MouseDownPoint.Y) / this.Bounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height;</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> </div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span>                    Rect target = <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(this.MouseDownDisplayArea.X + deltaX, <span class="keyword">this</span>.MouseDownDisplayArea.Y + deltaY), <span class="keyword">new</span> Point(this.MouseDownDisplayArea.Right + deltaX, <span class="keyword">this</span>.MouseDownDisplayArea.Bottom + deltaY));</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> </div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span>                    SetDisplayAreaNowInternal(target);</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span>                    this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.SizeAll);</div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> </div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span>                }</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span>                <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Highlight || (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.PanHighlight &amp;&amp; CurrentMouseOperation == CurrentMouseOperations.Highlight))</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span>                {</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> </div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span>                    Point point = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> </div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span>                    PointF pagePoint = <span class="keyword">new</span> PointF((<span class="keywordtype">float</span>)(point.X / <span class="keyword">this</span>.Bounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left), (<span class="keywordtype">float</span>)(point.Y / <span class="keyword">this</span>.Bounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top));</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> </div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span>                    MuPDFStructuredTextAddress? address = StructuredTextPage?.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a826d265a54daa1e9a2118f7fa85eaa29">GetClosestHitAddress</a>(pagePoint, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> </div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span>                    this.Selection = <span class="keyword">new</span> MuPDFStructuredTextAddressSpan(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2c17cb9551f5d108e665c6ca74732ad2">Selection</a>.<a class="code hl_variable" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span.html#a58bbbc28ca07666fb33dc3bbc4b8085d">Start</a>, address);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> </div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span>                    <span class="keywordflow">if</span> (address != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span>                    {</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Ibeam);</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span>                    }</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span>                    {</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Arrow);</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span>                    }</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span>                }</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span>            }</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span>            <span class="keywordflow">else</span></div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span>            {</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span>                <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.Highlight || <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">PointerEventHandlersType</a> == <a class="code hl_enumeration" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">PointerEventHandlers</a>.PanHighlight)</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span>                {</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span>                    Point point = e.GetPosition(<span class="keyword">this</span>);</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> </div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span>                    PointF pagePoint = <span class="keyword">new</span> PointF((<span class="keywordtype">float</span>)(point.X / <span class="keyword">this</span>.Bounds.Width * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left), (<span class="keywordtype">float</span>)(point.Y / <span class="keyword">this</span>.Bounds.Height * <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height + <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top));</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> </div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span>                    MuPDFStructuredTextAddress? address = StructuredTextPage?.<a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a72a1b22f5c01431cefb93ba1e2a06bd1">GetHitAddress</a>(pagePoint, <span class="keyword">false</span>);</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> </div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span>                    <span class="keywordflow">if</span> (address != <span class="keyword">null</span>)</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span>                    {</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Ibeam);</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span>                    }</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span>                    <span class="keywordflow">else</span></div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span>                    {</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span>                        this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Arrow);</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span>                    }</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span>                }</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span>                <span class="keywordflow">else</span></div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span>                {</div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span>                    this.Cursor = <span class="keyword">new</span> Cursor(StandardCursorType.Arrow);</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span>                }</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span>            }</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span>        }</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span><span class="comment"></span> </div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span><span class="comment">        /// Default handler for the PointerWheelChanged event (zoom in/out).</span></div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span><span class="comment">        /// &lt;param name=&quot;sender&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span><span class="comment">        /// &lt;param name=&quot;e&quot;&gt;&lt;/param&gt;</span></div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ControlPointerWheelChanged(<span class="keywordtype">object</span> sender, PointerWheelEventArgs e)</div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span>        {</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2ff0f7ce05dac392726917aa52d7f3e0">ZoomEnabled</a>)</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span>            {</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span>                <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a831d88219b6638d7d2192d32b9119270">ZoomStep</a>(e.Delta.Y, e.GetPosition(<span class="keyword">this</span>));</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span>            }</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span>        }</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span><span class="comment"></span> </div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span><span class="comment">        /// Compute the current value of the &lt;see cref=&quot;Zoom&quot;/&gt; property.</span></div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span><span class="comment"></span>        <span class="keyword">private</span> <span class="keywordtype">void</span> ComputeZoom()</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span>        {</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span>            <span class="comment">//Take into account DPI scaling.</span></div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span>            <span class="keywordtype">double</span> scale = (VisualRoot as ILayoutRoot).LayoutScaling;</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span>            SetAndRaise(<a class="code hl_variable" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aa80851bc316f16e126c48da9edd18ef0">ZoomProperty</a>, ref _Zoom, this.Bounds.Width / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width * 72 / 96 * scale);</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span>        }</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span><span class="comment"></span> </div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span><span class="comment">        /// &lt;summary&gt;</span></div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span><span class="comment">        /// Draw the rendered document.</span></div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span><span class="comment">        /// &lt;/summary&gt;</span></div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span><span class="comment">        /// &lt;param name=&quot;context&quot;&gt;The drawing context on which to draw.&lt;/param&gt;</span></div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"><a class="line" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad455b59f4623dd9c88e04b1419366930"> 1299</a></span><span class="comment"></span>        <span class="keyword">public</span> <span class="keyword">override</span> <span class="keywordtype">void</span> <a class="code hl_function" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad455b59f4623dd9c88e04b1419366930">Render</a>(DrawingContext context)</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span>        {</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span>            <span class="comment">//Take into account DPI scaling.</span></div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span>            <span class="keywordtype">double</span> scale = (VisualRoot as ILayoutRoot)?.LayoutScaling ?? 1;</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span>            context.FillRectangle(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a8043c46e4423cfeb51d84e2904a40c8e">Background</a>, this.Bounds);</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> </div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span>            <span class="comment">//Page boundaries (used to draw the page background).</span></div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span>            <span class="keywordtype">double</span> minX = Math.Max(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Left, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left);</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span>            <span class="keywordtype">double</span> maxX = Math.Min(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Right, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Right);</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span>            <span class="keywordtype">double</span> minY = Math.Max(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Top, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top);</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span>            <span class="keywordtype">double</span> maxY = Math.Min(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">PageSize</a>.Bottom, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Bottom);</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> </div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span>            <span class="keywordflow">if</span> (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">IsViewerInitialized</a>)</div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span>            {</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span>                <span class="keywordtype">bool</span> renderedDynamic = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> </div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span>                <span class="comment">//Check if someone is holding the mutex without blocking.</span></div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span>                <span class="keywordflow">if</span> (RenderMutex.WaitOne(0))</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span>                {</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span>                    <span class="comment">//Check if the DynamicBitmaps are ready</span></div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span>                    <span class="keywordflow">if</span> (AreDynamicBitmapsReady)</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span>                    {</div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span>                        <span class="comment">//Page background</span></div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span>                        context.FillRectangle(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32ecef50b26aa7c99dab390b49298b4e">PageBackground</a>, <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point((minX - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width * <span class="keyword">this</span>.Bounds.Width, (minY - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height * <span class="keyword">this</span>.Bounds.Height), <span class="keyword">new</span> Point((maxX - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width * <span class="keyword">this</span>.Bounds.Width, (maxY - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height * <span class="keyword">this</span>.Bounds.Height)));</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> </div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span>                        <span class="comment">//Draw the DynamicBitmaps.</span></div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span>                        <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; DynamicImagesBounds.Length; i++)</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span>                        {</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span>                            context.DrawImage(DynamicBitmaps[i], <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point(0, 0), DynamicBitmaps[i].PixelSize.ToSize(1)), <span class="keyword">new</span> Rect(DynamicImagesBounds[i].X0 / scale, DynamicImagesBounds[i].Y0 / scale, DynamicImagesBounds[i].Width / scale, DynamicImagesBounds[i].Height / scale));</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span>                        }</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> </div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span>                        <span class="comment">//Signal that we don&#39;t need to draw the static image.</span></div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span>                        renderedDynamic = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span>                    }</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> </div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span>                    <span class="comment">//Release the mutex.</span></div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span>                    RenderMutex.ReleaseMutex();</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span>                }</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> </div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span>                <span class="comment">//If the DynamicBitmaps have not been drawn, we fall back to drawing the static image (which will probably be ugly and pixelated, but better than nothing).</span></div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span>                <span class="keywordflow">if</span> (!renderedDynamic)</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span>                {</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span>                    <span class="comment">//Page background</span></div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span>                    context.FillRectangle(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32ecef50b26aa7c99dab390b49298b4e">PageBackground</a>, <span class="keyword">new</span> Rect(<span class="keyword">new</span> Point((minX - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width * <span class="keyword">this</span>.Bounds.Width, (minY - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height * <span class="keyword">this</span>.Bounds.Height), <span class="keyword">new</span> Point((maxX - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Left) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width * <span class="keyword">this</span>.Bounds.Width, (maxY - <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Top) / <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height * <span class="keyword">this</span>.Bounds.Height)));</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> </div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span>                    <span class="comment">//Top left corner of the DisplayArea in FixedCanvasBitmap coordinates.</span></div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span>                    Point topLeft = <span class="keyword">new</span> Point((<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.X - FixedArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">X0</a>) / FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">Width</a> * FixedCanvasBitmap.PixelSize.Width, (<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Y - FixedArea.<a class="code hl_variable" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">Y0</a>) / FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">Height</a> * FixedCanvasBitmap.PixelSize.Height);</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> </div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span>                    <span class="comment">//Size of the DisplayArea in FixedCanvasBitmap coordinates.</span></div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span>                    Avalonia.Size size = <span class="keyword">new</span> <a class="code hl_namespace" href="namespace_avalonia.html">Avalonia</a>.Size(<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Width / FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">Width</a> * FixedCanvasBitmap.PixelSize.Width, <a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">DisplayArea</a>.Height / FixedArea.<a class="code hl_property" href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">Height</a> * FixedCanvasBitmap.PixelSize.Height);</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> </div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span>                    <span class="comment">//Draw the FixedCanvasBitmap</span></div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span>                    context.DrawImage(FixedCanvasBitmap, <span class="keyword">new</span> Rect(topLeft, size), <span class="keyword">new</span> Rect(0, 0, this.Bounds.Width, <span class="keyword">this</span>.Bounds.Height));</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> </div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span>                    <span class="comment">//Draw the icon signaling that the DynamicBitmaps are still being rendered.</span></div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span>                    RefreshingGeometry.Transform = <span class="keyword">new</span> TranslateTransform(this.Bounds.Width - 38, 32);</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span>                    context.DrawGeometry(<span class="keyword">new</span> SolidColorBrush(Color.FromRgb(119, 170, 221)), <span class="keyword">null</span>, RefreshingGeometry);</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span>                }</div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> </div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span>                <span class="comment">//Draw the highlight quads</span></div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span>                <span class="keywordflow">if</span> (this.HighlightQuads != <span class="keyword">null</span> &amp;&amp; this.HighlightQuads.Count &gt; 0)</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span>                {</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span>                    PathGeometry highlightGeometry = <span class="keyword">new</span> PathGeometry() { FillRule = FillRule.NonZero };</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> </div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span>                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; this.HighlightQuads.Count; i++)</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span>                    {</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span>                        Point ll = <span class="keyword">new</span> Point((this.HighlightQuads[i].LowerLeft.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.HighlightQuads[i].LowerLeft.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span>                        Point ul = <span class="keyword">new</span> Point((this.HighlightQuads[i].UpperLeft.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.HighlightQuads[i].UpperLeft.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span>                        Point ur = <span class="keyword">new</span> Point((this.HighlightQuads[i].UpperRight.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.HighlightQuads[i].UpperRight.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span>                        Point lr = <span class="keyword">new</span> Point((this.HighlightQuads[i].LowerRight.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.HighlightQuads[i].LowerRight.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> </div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span>                        PathFigure quad = <span class="keyword">new</span> PathFigure() { StartPoint = ll, IsClosed = <span class="keyword">true</span>, IsFilled = <span class="keyword">true</span> };</div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = ul });</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = ur });</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = lr });</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> </div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span>                        highlightGeometry.Figures.Add(quad);</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span>                    }</div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> </div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span>                    context.DrawGeometry(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ac96346dddd3e288fb34d8ae34c48b69c">HighlightBrush</a>, <span class="keyword">null</span>, highlightGeometry);</div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span>                }</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> </div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span>                <span class="comment">//Draw the selection quads</span></div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span>                <span class="keywordflow">if</span> (this.SelectionQuads != <span class="keyword">null</span> &amp;&amp; this.SelectionQuads.Count &gt; 0)</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span>                {</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span>                    PathGeometry selectionGeometry = <span class="keyword">new</span> PathGeometry() { FillRule = FillRule.NonZero };</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> </div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span>                    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; this.SelectionQuads.Count; i++)</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span>                    {</div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span>                        Point ll = <span class="keyword">new</span> Point((this.SelectionQuads[i].LowerLeft.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.SelectionQuads[i].LowerLeft.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span>                        Point ul = <span class="keyword">new</span> Point((this.SelectionQuads[i].UpperLeft.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.SelectionQuads[i].UpperLeft.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span>                        Point ur = <span class="keyword">new</span> Point((this.SelectionQuads[i].UpperRight.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.SelectionQuads[i].UpperRight.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span>                        Point lr = <span class="keyword">new</span> Point((this.SelectionQuads[i].LowerRight.X - <span class="keyword">this</span>.DisplayArea.Left) * <span class="keyword">this</span>.Bounds.Width / <span class="keyword">this</span>.DisplayArea.Width, (<span class="keyword">this</span>.SelectionQuads[i].LowerRight.Y - <span class="keyword">this</span>.DisplayArea.Top) * <span class="keyword">this</span>.Bounds.Height / <span class="keyword">this</span>.DisplayArea.Height);</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> </div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span>                        PathFigure quad = <span class="keyword">new</span> PathFigure() { StartPoint = ll, IsClosed = <span class="keyword">true</span>, IsFilled = <span class="keyword">true</span> };</div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = ul });</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = ur });</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span>                        quad.Segments.Add(<span class="keyword">new</span> LineSegment() { Point = lr });</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> </div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span>                        selectionGeometry.Figures.Add(quad);</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span>                    }</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> </div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span>                    context.DrawGeometry(this.<a class="code hl_property" href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a57993b874fc88d1e1822eaf428865ff7">SelectionBrush</a>, <span class="keyword">null</span>, selectionGeometry);</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span>                }</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span>            }</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span>        }</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span>    }</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span>}</div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_disposable_int_ptr_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_disposable_int_ptr.html">MuPDFCore.DisposableIntPtr</a></div><div class="ttdoc">An IDisposable wrapper around an IntPtr that frees the allocated memory when it is disposed.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00406">MuPDF.cs:407</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_context_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_context.html">MuPDFCore.MuPDFContext</a></div><div class="ttdoc">A wrapper around a MuPDF context object, which contains the exception stack and the resource cache st...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_context_8cs_source.html#l00025">MuPDFContext.cs:26</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html">MuPDFCore.MuPDFDocument</a></div><div class="ttdoc">A wrapper over a MuPDF document object, which contains possibly multiple pages.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l00030">MuPDFDocument.cs:31</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html_a07d371f49b80285fe2303cc3736d34d8"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a07d371f49b80285fe2303cc3736d34d8">MuPDFCore.MuPDFDocument.Render</a></div><div class="ttdeci">byte[] Render(int pageNumber, Rectangle region, double zoom, PixelFormats pixelFormat, bool includeAnnotations=true)</div><div class="ttdoc">Render (part of) a page to an array of bytes.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l00602">MuPDFDocument.cs:602</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html_a5ea3701940cdfa3ca26676516a70bede"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a5ea3701940cdfa3ca26676516a70bede">MuPDFCore.MuPDFDocument.GetMultiThreadedRenderer</a></div><div class="ttdeci">MuPDFMultiThreadedPageRenderer GetMultiThreadedRenderer(int pageNumber, int threadCount, bool includeAnnotations=true)</div><div class="ttdoc">Create a new MuPDFMultiThreadedPageRenderer that renders the specified page with the specified number...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l00782">MuPDFDocument.cs:782</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html_a6a55fe2639c8e092f26fb2139e878754"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#a6a55fe2639c8e092f26fb2139e878754">MuPDFCore.MuPDFDocument.GetStructuredTextPage</a></div><div class="ttdeci">MuPDFStructuredTextPage GetStructuredTextPage(int pageNumber, bool includeAnnotations=true)</div><div class="ttdoc">Creates a new MuPDFStructuredTextPage from the specified page. This contains information about the te...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l01154">MuPDFDocument.cs:1154</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html_ab74eca1ade08acd6c1c6a02f86b4129e"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#ab74eca1ade08acd6c1c6a02f86b4129e">MuPDFCore.MuPDFDocument.GetStructuredTextPageAsync</a></div><div class="ttdeci">async Task&lt; MuPDFStructuredTextPage &gt; GetStructuredTextPageAsync(int pageNumber, TesseractLanguage ocrLanguage, bool includeAnnotations=true, CancellationToken cancellationToken=default, IProgress&lt; OCRProgressInfo &gt; progress=null)</div><div class="ttdoc">Creates a new MuPDFStructuredTextPage from the specified page, using optical character recognition (O...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l01211">MuPDFDocument.cs:1211</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_document_html_ac691043a7c74ff979a4f80279a8e9f79"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_document.html#ac691043a7c74ff979a4f80279a8e9f79">MuPDFCore.MuPDFDocument.Pages</a></div><div class="ttdeci">MuPDFPageCollection Pages</div><div class="ttdoc">The pages contained in the document.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_document_8cs_source.html#l00104">MuPDFDocument.cs:104</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html">MuPDFCore.MuPDFMultiThreadedPageRenderer</a></div><div class="ttdoc">A class that holds the necessary resources to render a page of a MuPDF document using multiple thread...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00276">MuPDFMultiThreadedPageRenderer.cs:277</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_a05eca723202ae5ca1b535b8fe32ef405"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a05eca723202ae5ca1b535b8fe32ef405">MuPDFCore.MuPDFMultiThreadedPageRenderer.Abort</a></div><div class="ttdeci">void Abort()</div><div class="ttdoc">Signal to the rendering threads that they should abort rendering as soon as possible.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00543">MuPDFMultiThreadedPageRenderer.cs:543</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_a9f2e30c872e3b409af2333aede3503f7"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#a9f2e30c872e3b409af2333aede3503f7">MuPDFCore.MuPDFMultiThreadedPageRenderer.ThreadCount</a></div><div class="ttdeci">int ThreadCount</div><div class="ttdoc">The number of threads that are used to render the image.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00306">MuPDFMultiThreadedPageRenderer.cs:306</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_ab3967195e249f10b89eadaeed551a409"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#ab3967195e249f10b89eadaeed551a409">MuPDFCore.MuPDFMultiThreadedPageRenderer.GetProgress</a></div><div class="ttdeci">RenderProgress GetProgress()</div><div class="ttdoc">Get the current rendering progress of all the threads.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00555">MuPDFMultiThreadedPageRenderer.cs:555</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer_html_afb748f194d7f6983f68c475b53943da5"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_multi_threaded_page_renderer.html#afb748f194d7f6983f68c475b53943da5">MuPDFCore.MuPDFMultiThreadedPageRenderer.Render</a></div><div class="ttdeci">void Render(RoundedSize targetSize, Rectangle region, IntPtr[] destinations, PixelFormats pixelFormat)</div><div class="ttdoc">Render the specified region to an image of the specified size, split in a number of tiles equal to th...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_multi_threaded_page_renderer_8cs_source.html#l00383">MuPDFMultiThreadedPageRenderer.cs:383</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html">MuPDFCore.MuPDFRenderer.PDFRenderer</a></div><div class="ttdoc">A control to render PDF documents (and other formats), potentally using multiple threads.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00042">PDFRenderer.cs:43</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a026cdf9ee1222daed654fed059601f72"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a026cdf9ee1222daed654fed059601f72">MuPDFCore.MuPDFRenderer.PDFRenderer.InitializeAsync</a></div><div class="ttdeci">async Task InitializeAsync(MuPDFDocument document, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null, CancellationToken ocrCancellationToken=default, IProgress&lt; OCRProgressInfo &gt; ocrProgress=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a MuPDFDocument. The OCR step is run asynchronously,...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00284">PDFRenderer.cs:284</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a07e1ea463721c5a89666d1b5fe27c175"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a07e1ea463721c5a89666d1b5fe27c175">MuPDFCore.MuPDFRenderer.PDFRenderer.ReleaseResources</a></div><div class="ttdeci">void ReleaseResources()</div><div class="ttdoc">Release resources held by this PDFRenderer. This is not an irreversible step: using one of the Initia...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00619">PDFRenderer.cs:619</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a0ccf2a6b6375010f521af4993d5a51ff"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a0ccf2a6b6375010f521af4993d5a51ff">MuPDFCore.MuPDFRenderer.PDFRenderer.PointerEventHandlers</a></div><div class="ttdeci">PointerEventHandlers</div><div class="ttdoc">Identifies the action to perform on pointer events.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00246">PDFRenderer.Properties.cs:247</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a10cc5f8912f189d0263b5765b3800510"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a10cc5f8912f189d0263b5765b3800510">MuPDFCore.MuPDFRenderer.PDFRenderer.PageNumber</a></div><div class="ttdeci">int PageNumber</div><div class="ttdoc">Exposes the number of the page that the current instance is rendering. Read-only.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00064">PDFRenderer.Properties.cs:65</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a2c17cb9551f5d108e665c6ca74732ad2"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2c17cb9551f5d108e665c6ca74732ad2">MuPDFCore.MuPDFRenderer.PDFRenderer.Selection</a></div><div class="ttdeci">MuPDFStructuredTextAddressSpan Selection</div><div class="ttdoc">The start and end of the currently selected text.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00302">PDFRenderer.Properties.cs:303</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a2ff0f7ce05dac392726917aa52d7f3e0"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a2ff0f7ce05dac392726917aa52d7f3e0">MuPDFCore.MuPDFRenderer.PDFRenderer.ZoomEnabled</a></div><div class="ttdeci">bool ZoomEnabled</div><div class="ttdoc">Whether the default handlers for pointer wheel events (which are used for zooming in/out) should be e...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00289">PDFRenderer.Properties.cs:290</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a32bad5475238f89c4ef1bd5d0976c08d"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32bad5475238f89c4ef1bd5d0976c08d">MuPDFCore.MuPDFRenderer.PDFRenderer.DisplayAreaProperty</a></div><div class="ttdeci">static readonly StyledProperty&lt; Rect &gt; DisplayAreaProperty</div><div class="ttdoc">Defines the DisplayArea property.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00128">PDFRenderer.Properties.cs:128</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a32ecef50b26aa7c99dab390b49298b4e"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a32ecef50b26aa7c99dab390b49298b4e">MuPDFCore.MuPDFRenderer.PDFRenderer.PageBackground</a></div><div class="ttdeci">IBrush PageBackground</div><div class="ttdoc">The background colour to use for the page drawn by the control.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00199">PDFRenderer.Properties.cs:200</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a340358c07ed29c0497003154e7388969"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a340358c07ed29c0497003154e7388969">MuPDFCore.MuPDFRenderer.PDFRenderer.RenderThreadCount</a></div><div class="ttdeci">int RenderThreadCount</div><div class="ttdoc">Exposes the number of threads that the current instance is using to render the document....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00040">PDFRenderer.Properties.cs:41</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a394753442f87f857406e0b911419fb77"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a394753442f87f857406e0b911419fb77">MuPDFCore.MuPDFRenderer.PDFRenderer.InitializeAsync</a></div><div class="ttdeci">async Task InitializeAsync(string fileName, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null, CancellationToken ocrCancellationToken=default, IProgress&lt; OCRProgressInfo &gt; ocrProgress=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from disk....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00334">PDFRenderer.cs:334</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a404edbc2007a610faa0c860325e716eb"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a404edbc2007a610faa0c860325e716eb">MuPDFCore.MuPDFRenderer.PDFRenderer.PDFRenderer</a></div><div class="ttdeci">PDFRenderer()</div><div class="ttdoc">Initializes a new instance of the PDFRenderer class.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00203">PDFRenderer.cs:203</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a4b5fb2f9ad460c427d04dd07bfa557ef"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4b5fb2f9ad460c427d04dd07bfa557ef">MuPDFCore.MuPDFRenderer.PDFRenderer.GetProgress</a></div><div class="ttdeci">RenderProgress GetProgress()</div><div class="ttdoc">Get the current rendering progress.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00728">PDFRenderer.cs:728</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a4d0c7f77003321d29dbcff339ac39455"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d0c7f77003321d29dbcff339ac39455">MuPDFCore.MuPDFRenderer.PDFRenderer.Initialize</a></div><div class="ttdeci">void Initialize(MuPDFDocument document, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a MuPDFDocument.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00258">PDFRenderer.cs:258</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a4d7e007cc5b91e65acd1c7aedb87c2b4"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a4d7e007cc5b91e65acd1c7aedb87c2b4">MuPDFCore.MuPDFRenderer.PDFRenderer.IsViewerInitialized</a></div><div class="ttdeci">bool IsViewerInitialized</div><div class="ttdoc">Whether the current instance has been initialised with a document to render or not....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00088">PDFRenderer.Properties.cs:89</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a508408b971d2c433c8184442a5f5f439"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a508408b971d2c433c8184442a5f5f439">MuPDFCore.MuPDFRenderer.PDFRenderer.PointerEventHandlersType</a></div><div class="ttdeci">PointerEventHandlers PointerEventHandlersType</div><div class="ttdoc">Whether the default handlers for pointer events (which are used for panning around the page) should b...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00276">PDFRenderer.Properties.cs:277</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a57993b874fc88d1e1822eaf428865ff7"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a57993b874fc88d1e1822eaf428865ff7">MuPDFCore.MuPDFRenderer.PDFRenderer.SelectionBrush</a></div><div class="ttdeci">IBrush SelectionBrush</div><div class="ttdoc">The colour used to highlight the Selection.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00315">PDFRenderer.Properties.cs:316</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a5a2fdaa31f4bf7ae8b3912d620a83759"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a5a2fdaa31f4bf7ae8b3912d620a83759">MuPDFCore.MuPDFRenderer.PDFRenderer.ZoomIncrement</a></div><div class="ttdeci">double ZoomIncrement</div><div class="ttdoc">Determines by how much the scale will be increased/decreased by the ZoomStep(double,...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00164">PDFRenderer.Properties.cs:165</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a72c36ddc32230db7507d158447d8eda5"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c36ddc32230db7507d158447d8eda5">MuPDFCore.MuPDFRenderer.PDFRenderer.Cover</a></div><div class="ttdeci">void Cover()</div><div class="ttdoc">Alter the display area so that the page covers the whole surface of the PDFRenderer (even though part...</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00707">PDFRenderer.cs:707</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a72c81912abc0f4f4d221ae5aedc2cac2"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a72c81912abc0f4f4d221ae5aedc2cac2">MuPDFCore.MuPDFRenderer.PDFRenderer.InitializeAsync</a></div><div class="ttdeci">async Task InitializeAsync(MemoryStream ms, InputFileTypes fileType, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null, CancellationToken ocrCancellationToken=default, IProgress&lt; OCRProgressInfo &gt; ocrProgress=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from a MemoryStream....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00381">PDFRenderer.cs:381</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a76c055712e78a0f2575b53059ce05a69"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a76c055712e78a0f2575b53059ce05a69">MuPDFCore.MuPDFRenderer.PDFRenderer.Initialize</a></div><div class="ttdeci">void Initialize(byte[] dataBytes, InputFileTypes fileType, int offset=0, int length=-1, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from an array of bytes.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00403">PDFRenderer.cs:403</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a78100c2074f6add556fe0b0e783af5c7"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a78100c2074f6add556fe0b0e783af5c7">MuPDFCore.MuPDFRenderer.PDFRenderer.HighlightedRegions</a></div><div class="ttdeci">IEnumerable&lt; MuPDFStructuredTextAddressSpan &gt; HighlightedRegions</div><div class="ttdoc">A collection of highlighted regions, e.g. as a result of a text search.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00328">PDFRenderer.Properties.cs:329</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a8043c46e4423cfeb51d84e2904a40c8e"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a8043c46e4423cfeb51d84e2904a40c8e">MuPDFCore.MuPDFRenderer.PDFRenderer.Background</a></div><div class="ttdeci">IBrush Background</div><div class="ttdoc">The background colour of the control.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00186">PDFRenderer.Properties.cs:187</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a831d88219b6638d7d2192d32b9119270"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a831d88219b6638d7d2192d32b9119270">MuPDFCore.MuPDFRenderer.PDFRenderer.ZoomStep</a></div><div class="ttdeci">void ZoomStep(double count, Point? center=null)</div><div class="ttdoc">Zoom around a point.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00673">PDFRenderer.cs:673</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a8f0e5046070368b4d5b123a1017755c8"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a8f0e5046070368b4d5b123a1017755c8">MuPDFCore.MuPDFRenderer.PDFRenderer.Initialize</a></div><div class="ttdeci">void Initialize(string fileName, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from disk.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00308">PDFRenderer.cs:308</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_a93a4b99fc4d8e41f83d043da24f813b5"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#a93a4b99fc4d8e41f83d043da24f813b5">MuPDFCore.MuPDFRenderer.PDFRenderer.SetDisplayAreaNow</a></div><div class="ttdeci">void SetDisplayAreaNow(Rect value)</div><div class="ttdoc">Set the current display area to the specified value , skipping all transitions.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00660">PDFRenderer.cs:660</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_aa2d32d055251b0d52b6d8c156ec3ada9"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aa2d32d055251b0d52b6d8c156ec3ada9">MuPDFCore.MuPDFRenderer.PDFRenderer.Search</a></div><div class="ttdeci">int Search(Regex needle)</div><div class="ttdoc">Highlights all matches of the specified Regex in the text and returns the number of matches found....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00766">PDFRenderer.cs:766</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_aa80851bc316f16e126c48da9edd18ef0"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aa80851bc316f16e126c48da9edd18ef0">MuPDFCore.MuPDFRenderer.PDFRenderer.ZoomProperty</a></div><div class="ttdeci">static readonly DirectProperty&lt; PDFRenderer, double &gt; ZoomProperty</div><div class="ttdoc">Defines the Zoom property.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00208">PDFRenderer.Properties.cs:208</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_aabc04d9677a558d2456cb37d1358e43b"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aabc04d9677a558d2456cb37d1358e43b">MuPDFCore.MuPDFRenderer.PDFRenderer.GetSelectedText</a></div><div class="ttdeci">string GetSelectedText()</div><div class="ttdoc">Get the currently selected text.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00737">PDFRenderer.cs:737</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_abbd47ddd116a38d05f8b3e2f1e2e88f6"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#abbd47ddd116a38d05f8b3e2f1e2e88f6">MuPDFCore.MuPDFRenderer.PDFRenderer.DisplayArea</a></div><div class="ttdeci">Rect DisplayArea</div><div class="ttdoc">The region of the page (in page units) that is currently displayed by the current instance....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00133">PDFRenderer.Properties.cs:134</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_ac96346dddd3e288fb34d8ae34c48b69c"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ac96346dddd3e288fb34d8ae34c48b69c">MuPDFCore.MuPDFRenderer.PDFRenderer.HighlightBrush</a></div><div class="ttdeci">IBrush HighlightBrush</div><div class="ttdoc">The colour used to highlight the HighlightedRegions.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00341">PDFRenderer.Properties.cs:342</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_acb6eae5f0c6977b32930e33d46addfca"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#acb6eae5f0c6977b32930e33d46addfca">MuPDFCore.MuPDFRenderer.PDFRenderer.Initialize</a></div><div class="ttdeci">void Initialize(MemoryStream ms, InputFileTypes fileType, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from a MemoryStream.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00359">PDFRenderer.cs:359</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_ad06475fdd1cb91588789beb785c4ef86"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad06475fdd1cb91588789beb785c4ef86">MuPDFCore.MuPDFRenderer.PDFRenderer.InitializeAsync</a></div><div class="ttdeci">async Task InitializeAsync(byte[] dataBytes, InputFileTypes fileType, int offset=0, int length=-1, int threadCount=0, int pageNumber=0, double resolutionMultiplier=1, bool includeAnnotations=true, TesseractLanguage ocrLanguage=null, CancellationToken ocrCancellationToken=default, IProgress&lt; OCRProgressInfo &gt; ocrProgress=null)</div><div class="ttdoc">Set up the PDFRenderer to display a page of a document that will be loaded from an array of bytes....</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00446">PDFRenderer.cs:446</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_ad286c093a68049c0b1ba8e33e1c44103"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad286c093a68049c0b1ba8e33e1c44103">MuPDFCore.MuPDFRenderer.PDFRenderer.PageSize</a></div><div class="ttdeci">Rect PageSize</div><div class="ttdoc">Exposes the size of the page that is drawn by the current instance (in page units).</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8_properties_8cs_source.html#l00112">PDFRenderer.Properties.cs:113</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_ad455b59f4623dd9c88e04b1419366930"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#ad455b59f4623dd9c88e04b1419366930">MuPDFCore.MuPDFRenderer.PDFRenderer.Render</a></div><div class="ttdeci">override void Render(DrawingContext context)</div><div class="ttdoc">Draw the rendered document.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l01299">PDFRenderer.cs:1299</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_aea002a2985da0e95cad9dee7a9d68626"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#aea002a2985da0e95cad9dee7a9d68626">MuPDFCore.MuPDFRenderer.PDFRenderer.SelectAll</a></div><div class="ttdeci">void SelectAll()</div><div class="ttdoc">Selects all the text in the document.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00745">PDFRenderer.cs:745</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer_html_af3695e65c81da6b9fb775127590a8ec5"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_renderer_1_1_p_d_f_renderer.html#af3695e65c81da6b9fb775127590a8ec5">MuPDFCore.MuPDFRenderer.PDFRenderer.Contain</a></div><div class="ttdeci">void Contain()</div><div class="ttdoc">Alter the display area so that the whole page fits on screen.</div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00698">PDFRenderer.cs:698</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span.html">MuPDFCore.MuPDFStructuredTextAddressSpan</a></div><div class="ttdoc">Represents a range of characters in a MuPDFStructuredTextPage.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l01254">MuPDFStructuredTextPage.cs:1255</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span_html_a58bbbc28ca07666fb33dc3bbc4b8085d"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_span.html#a58bbbc28ca07666fb33dc3bbc4b8085d">MuPDFCore.MuPDFStructuredTextAddressSpan.Start</a></div><div class="ttdeci">readonly MuPDFStructuredTextAddress Start</div><div class="ttdoc">The addres of the start of the range.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l01259">MuPDFStructuredTextPage.cs:1259</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html">MuPDFCore.MuPDFStructuredTextPage</a></div><div class="ttdoc">Represents a structured representation of the text contained in a page.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00031">MuPDFStructuredTextPage.cs:32</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_a72a1b22f5c01431cefb93ba1e2a06bd1"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a72a1b22f5c01431cefb93ba1e2a06bd1">MuPDFCore.MuPDFStructuredTextPage.GetHitAddress</a></div><div class="ttdeci">MuPDFStructuredTextAddress? GetHitAddress(PointF point, bool includeImages)</div><div class="ttdoc">Gets the address of the character that contains the specified point  in page units.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00174">MuPDFStructuredTextPage.cs:174</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_a826d265a54daa1e9a2118f7fa85eaa29"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#a826d265a54daa1e9a2118f7fa85eaa29">MuPDFCore.MuPDFStructuredTextPage.GetClosestHitAddress</a></div><div class="ttdeci">MuPDFStructuredTextAddress? GetClosestHitAddress(PointF point, bool includeImages)</div><div class="ttdoc">Gets the address of the character that contains the specified point  in page units.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00208">MuPDFStructuredTextPage.cs:208</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_aa69ccb2e2a5a88cbf4d39270fb32e8b6"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#aa69ccb2e2a5a88cbf4d39270fb32e8b6">MuPDFCore.MuPDFStructuredTextPage.Count</a></div><div class="ttdeci">int Count</div><div class="ttdoc">The number of blocks in the page.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00041">MuPDFStructuredTextPage.cs:41</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_ae23b5768410274d63f36088111b4d2cc"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#ae23b5768410274d63f36088111b4d2cc">MuPDFCore.MuPDFStructuredTextPage.Search</a></div><div class="ttdeci">IEnumerable&lt; MuPDFStructuredTextAddressSpan &gt; Search(Regex needle)</div><div class="ttdoc">Searches for the specified Regex in the text of the page. A single match cannot span multiple lines.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00497">MuPDFStructuredTextPage.cs:497</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_af8a0400f7f4be3f7d3a9649c7ef9bcdd"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#af8a0400f7f4be3f7d3a9649c7ef9bcdd">MuPDFCore.MuPDFStructuredTextPage.GetText</a></div><div class="ttdeci">string GetText(MuPDFStructuredTextAddressSpan range)</div><div class="ttdoc">Gets the text corresponding to the specified character range . Blocks containing images are ignored.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00386">MuPDFStructuredTextPage.cs:386</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page_html_afd2b0e40b332065320cb2fe13da21388"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_page.html#afd2b0e40b332065320cb2fe13da21388">MuPDFCore.MuPDFStructuredTextPage.GetHighlightQuads</a></div><div class="ttdeci">IEnumerable&lt; Quad &gt; GetHighlightQuads(MuPDFStructuredTextAddressSpan range, bool includeImages)</div><div class="ttdoc">Gets a collection of Quads delimiting the specified character range . Where possible,...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00281">MuPDFStructuredTextPage.cs:281</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_render_progress_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_render_progress.html">MuPDFCore.RenderProgress</a></div><div class="ttdoc">Holds a summary of the progress of the current rendering operation.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00368">MuPDF.cs:369</a></div></div>
<div class="ttc" id="aclass_mu_p_d_f_core_1_1_tesseract_language_html"><div class="ttname"><a href="class_mu_p_d_f_core_1_1_tesseract_language.html">MuPDFCore.TesseractLanguage</a></div><div class="ttdoc">Represents a language used by Tesseract OCR.</div><div class="ttdef"><b>Definition:</b> <a href="_tesseract_language_8cs_source.html#l00013">TesseractLanguage.cs:14</a></div></div>
<div class="ttc" id="anamespace_avalonia_1_1_animation_html"><div class="ttname"><a href="namespace_avalonia_1_1_animation.html">Avalonia.Animation</a></div><div class="ttdef"><b>Definition:</b> <a href="_rect_transition_8cs_source.html#l00021">RectTransition.cs:22</a></div></div>
<div class="ttc" id="anamespace_avalonia_html"><div class="ttname"><a href="namespace_avalonia.html">Avalonia</a></div><div class="ttdef"><b>Definition:</b> <a href="_rect_transition_8cs_source.html#l00021">RectTransition.cs:22</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_1_1_mu_p_d_f_renderer_html"><div class="ttname"><a href="namespace_mu_p_d_f_core_1_1_mu_p_d_f_renderer.html">MuPDFCore.MuPDFRenderer</a></div><div class="ttdef"><b>Definition:</b> <a href="_p_d_f_renderer_8cs_source.html#l00037">PDFRenderer.cs:38</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_html_a6f956802ff33af39b555fc95caf5486f"><div class="ttname"><a href="namespace_mu_p_d_f_core.html#a6f956802ff33af39b555fc95caf5486f">MuPDFCore.InputFileTypes</a></div><div class="ttdeci">InputFileTypes</div><div class="ttdoc">File types supported in input by the library.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00122">MuPDF.cs:123</a></div></div>
<div class="ttc" id="anamespace_mu_p_d_f_core_html_ade1eb4d4f9c9c8a66bde9152ea9e41bb"><div class="ttname"><a href="namespace_mu_p_d_f_core.html#ade1eb4d4f9c9c8a66bde9152ea9e41bb">MuPDFCore.PixelFormats</a></div><div class="ttdeci">PixelFormats</div><div class="ttdoc">Pixel formats supported by the library.</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_8cs_source.html#l00235">MuPDF.cs:236</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_mu_p_d_f_structured_text_address.html">MuPDFCore.MuPDFStructuredTextAddress</a></div><div class="ttdoc">Represents the address of a particular character in a MuPDFStructuredTextPage, in terms of block inde...</div><div class="ttdef"><b>Definition:</b> <a href="_mu_p_d_f_structured_text_page_8cs_source.html#l00961">MuPDFStructuredTextPage.cs:962</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html">MuPDFCore.Rectangle</a></div><div class="ttdoc">Represents a rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00326">Rectangles.cs:327</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a27cf4d4747a8677f8103746ee3386595"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a27cf4d4747a8677f8103746ee3386595">MuPDFCore.Rectangle.Round</a></div><div class="ttdeci">RoundedRectangle Round()</div><div class="ttdoc">Round the rectangle's coordinates to the closest integers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00392">Rectangles.cs:392</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a4ea4052094e051b974b7ca1bc9346655"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a4ea4052094e051b974b7ca1bc9346655">MuPDFCore.Rectangle.Width</a></div><div class="ttdeci">float Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00351">Rectangles.cs:351</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a5a06dd7d57268bdf22b5ce741b9dbf4e"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a5a06dd7d57268bdf22b5ce741b9dbf4e">MuPDFCore.Rectangle.Height</a></div><div class="ttdeci">float Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00356">Rectangles.cs:356</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a5e3466975ea3adbd9ab7a6920247170b"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a5e3466975ea3adbd9ab7a6920247170b">MuPDFCore.Rectangle.Y0</a></div><div class="ttdeci">float Y0</div><div class="ttdoc">The top coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00336">Rectangles.cs:336</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rectangle_html_a7cc750e4547b99f89a6427ab86b99fb3"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rectangle.html#a7cc750e4547b99f89a6427ab86b99fb3">MuPDFCore.Rectangle.X0</a></div><div class="ttdeci">float X0</div><div class="ttdoc">The left coordinate of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00331">Rectangles.cs:331</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html">MuPDFCore.RoundedRectangle</a></div><div class="ttdoc">Represents a rectangle using only integer numbers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00494">Rectangles.cs:495</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html_a29904ab0820872c48e43631ece9f1fff"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a29904ab0820872c48e43631ece9f1fff">MuPDFCore.RoundedRectangle.Width</a></div><div class="ttdeci">int Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00519">Rectangles.cs:519</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_rectangle_html_a73d75f9e5e23910ee0a4078eec4980c9"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_rectangle.html#a73d75f9e5e23910ee0a4078eec4980c9">MuPDFCore.RoundedRectangle.Height</a></div><div class="ttdeci">int Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00524">Rectangles.cs:524</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html">MuPDFCore.RoundedSize</a></div><div class="ttdoc">Represents the size of a rectangle using only integer numbers.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00181">Rectangles.cs:182</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html_a0c85da598b26dbd5bb66e60af22190de"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html#a0c85da598b26dbd5bb66e60af22190de">MuPDFCore.RoundedSize.Height</a></div><div class="ttdeci">int Height</div><div class="ttdoc">The height of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00191">Rectangles.cs:191</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_rounded_size_html_a5e5954ae76c12cb8a36572be2354aa4b"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_rounded_size.html#a5e5954ae76c12cb8a36572be2354aa4b">MuPDFCore.RoundedSize.Width</a></div><div class="ttdeci">int Width</div><div class="ttdoc">The width of the rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00186">Rectangles.cs:186</a></div></div>
<div class="ttc" id="astruct_mu_p_d_f_core_1_1_size_html"><div class="ttname"><a href="struct_mu_p_d_f_core_1_1_size.html">MuPDFCore.Size</a></div><div class="ttdoc">Represents the size of a rectangle.</div><div class="ttdef"><b>Definition:</b> <a href="_rectangles_8cs_source.html#l00025">Rectangles.cs:26</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_59a7178945527d45d0418ae68ee0f32d.html">MuPDFCore.MuPDFRenderer</a></li><li class="navelem"><b>PDFRenderer.cs</b></li>
    <li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.4 </li>
  </ul>
</div>
</body>
</html>
